当前位置:  开发笔记 > 编程语言 > 正文

导入包.*vs import package.SpecificType

如何解决《导入包.*vsimportpackage.SpecificType》经验,为你挑选了6个好方法。

是否会在编写导入时将开销加载到一个包中的所有类型(import java.*); 而不只是一个特定的类型(即import java.lang.ClassLoader)?第二个是比另一个更合适的使用方式吗?



1> Chris Cudmor..:

看一下java API,你会在不同的包中看到许多具有相同名称的类和接口.

例如:

java.lang.reflect.Array
java.sql.Array

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

相反,导入特定的类将为您节省麻烦.


命名冲突!我确实忽略了那一个.+1给你

2> shsteimer..:

导入时没有性能或间接成本.*vs导入特定类型.但是,我认为从不使用导入是最好的做法.*我的主要原因是我只想保持事情的直接,干净和尽可能少的模棱两可,我想用.*import你会失去那个.


怀疑这将有任何优化问题.除了命名冲突,您可以使用特定的import语句轻松避免它们.即使你懒得输入所有的导入,现代IDE也会为你做...

3> Scott Stanch..:

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

假设你写

import a.*;
import b.*;
...
Foo f;

和类Foo存在于包a中.

现在,您检查完美的编译代码,六个月后,有人将类Foo添加到包b中.(也许它是第三方库,在最新版本中添加了类).

噗!现在你的代码拒绝编译.

永远不要使用按需进口.这是邪恶的!

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

RE表现:

import a.*;

VS

import a.X;

在运行时没有任何区别.编译器将已解析的类名称硬编码到生成的.class文件中.


这不是*"邪恶"*,它只是有一个你应该意识到的缺点.

4> Dan Rosensta..:

少数派观点:在我的代码中,我倾向于使用几个包中的大量类以及一些奇怪的类.我喜欢保持我的进口清单很小,所以我可以一眼就看出发生了什么.为此,我将阈值设置为4个类.在此之上,Eclipse将使用*作为我的代码.我发现这可以保持我的包导入可读,我倾向于将它们称为在看课时的第一件事,回答这个问题:谁与它交谈?

关于名称冲突:从两个具有竞争类名的包中导入四个或更多类的几率是多少?如果它超过10%的时间,您可能需要考虑您的类所依赖的包的数量(例如,将其重构为较小的类).


我同意; 我在实践中只碰到过AWT List和util List碰撞,然后我通常只为我想要的那个添加一个特定的导入,通常是集合.
@Software Monkey,是的.包的全部意义在于它们是粘在一起的类,这就是导入背后的原因.

5> VonC..:

永远不要使用import xxx.*的一个很好的理由是对依赖关系有清晰的认识.

您可以更快地了解您正在使用另一个包的特定类,因为它列在源文件的开头.


如果您的导入列表长度为70或200行,则您不再对依赖关系有清晰的认识.
但这不是导入声明的错,它是你的.

6> Juan Carlos ..:

在寻找更多信息之后,我偶然发现了这个网站.导入问题并在导入语句中使用*会影响性能吗?.

这两种风格之间有效率问题吗?可能,但由于导入声明实际上并没有将任何内容导入到您的程序中,因此任何差异都非常小.请记住,在编译单元的顶部有一个隐式的导入java.lang.*,而JDK 1.2.2中的java.lang包含75个类和接口.使用一个设计实例的实验,其中包含必须查找的数千个类名使用,显示编译速度的变化可以忽略不计.因此,在选择一种格式而不是另一种格式时,编译性能可能不应被视为一个因素.

进口申报有一个最终的利益角度.假设您使用内部类:

package P;

public class A {
    public static class B {}
}

如果要从另一个编译单元访问A,请说:

import P.*;

或:导入PA; 但如果您想无限制地访问B,您需要说:

import P.A.*;

或:导入PAB; 第一个在类包A中找到类A中的可用类型.第二个使得包A中的类A中的类型B可用.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有