与特定类型(即import java.lang.ClassLoader
)相比,编写一个导入加载一个包(import java.*
)中的所有类型的开销是否会有所不同?第二种方式会比另一种更可取吗?
发布于 2008-10-09 14:17:01
与导入特定类型相比,导入.*不会产生性能或开销成本。然而,我认为永远不要使用导入.*是一种最佳实践。我这样做的主要原因是我只想让事情变得简单、干净,并且尽可能少含糊不清,而我认为使用.*导入就会失去这一点。
发布于 2008-10-09 14:21:21
看一看java API,您会在不同的包中看到许多同名的类和接口。
例如:
java.lang.reflect.Array
java.sql.Array
因此,如果您导入java.lang.reflect.*
和java.sql.*
,您将在数组类型上发生冲突,并且必须在您的代码中完全限定它们。
相反,导入特定的类可以省去这方面的麻烦。
发布于 2008-10-09 18:46:26
这实际上是一个非常糟糕的问题。
假设你写道
import a.*;
import b.*;
...
Foo f;
并且类Foo存在于包a中。
现在,您签入了完美编译的代码,六个月后,有人将类Foo添加到包b中(可能是第三方库在最新版本中添加了类)。
哇塞!现在,您的代码拒绝编译。
从不使用按需导入。这是邪恶的!
有关更多详细信息,请参阅http://javadude.com/articles/importondemandisevil.html。
RE性能:
import a.*;
vs
import a.X;
在运行时没有区别。编译器将解析的类名硬连接到生成的.class文件中。
https://stackoverflow.com/questions/187453
复制相似问题