首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导入package。* vs导入package.SpecificType

导入package。* vs导入package.SpecificType
EN

Stack Overflow用户
提问于 2008-10-09 14:12:45
回答 10查看 73.9K关注 0票数 109

与特定类型(即import java.lang.ClassLoader)相比,编写一个导入加载一个包(import java.*)中的所有类型的开销是否会有所不同?第二种方式会比另一种更可取吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2008-10-09 14:17:01

与导入特定类型相比,导入.*不会产生性能或开销成本。然而,我认为永远不要使用导入.*是一种最佳实践。我这样做的主要原因是我只想让事情变得简单、干净,并且尽可能少含糊不清,而我认为使用.*导入就会失去这一点。

票数 115
EN

Stack Overflow用户

发布于 2008-10-09 14:21:21

看一看java API,您会在不同的包中看到许多同名的类和接口。

例如:

代码语言:javascript
运行
复制
java.lang.reflect.Array
java.sql.Array

因此,如果您导入java.lang.reflect.*java.sql.*,您将在数组类型上发生冲突,并且必须在您的代码中完全限定它们。

相反,导入特定的类可以省去这方面的麻烦。

票数 132
EN

Stack Overflow用户

发布于 2008-10-09 18:46:26

这实际上是一个非常糟糕的问题。

假设你写道

代码语言:javascript
运行
复制
import a.*;
import b.*;
...
Foo f;

并且类Foo存在于包a中。

现在,您签入了完美编译的代码,六个月后,有人将类Foo添加到包b中(可能是第三方库在最新版本中添加了类)。

哇塞!现在,您的代码拒绝编译。

从不使用按需导入。这是邪恶的!

有关更多详细信息,请参阅http://javadude.com/articles/importondemandisevil.html

RE性能:

代码语言:javascript
运行
复制
import a.*;

vs

代码语言:javascript
运行
复制
import a.X;

在运行时没有区别。编译器将解析的类名硬连接到生成的.class文件中。

票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/187453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档