使用单个语句更方便,更简洁,比如

import java.awt.*;

而不是导入一堆单独的类

import java.awt.Panel;
import java.awt.Graphics;
import java.awt.Canvas;
...

在import语句中使用通配符有什么问题?


当前回答

最重要的是导入java.awt。*可以使您的程序与未来的Java版本不兼容:

假设你有一个名为“ABC”的类,你使用的是JDK 8,你导入java.util.*。现在,假设Java 9出来了,它在包Java中有一个新类。直到它碰巧也被称为“ABC”。您的程序现在不能在Java 9上编译,因为编译器不知道您的“ABC”名称是指您自己的类还是Java .awt中的新类。

如果只从java显式地导入这些类,就不会遇到这个问题。你实际使用的。

资源:

Java进口

其他回答

忘掉混乱的命名空间……想想那些不得不在GitHub、vi、notepad++或其他非ide文本编辑器中阅读和理解你的代码的可怜人吧。

这个人必须煞费苦心地查找每个通配符作用域中所有类和引用中来自一个通配符的每个标记……只是想搞清楚到底发生了什么。

如果你只是为编译器编写代码——而且你知道你在做什么——我相信通配符没有问题。

但是,如果其他人(包括未来的您)希望一次阅读就能快速理解某个特定的代码文件,那么显式引用会有很大帮助。

在DDD书中

在实现将基于的任何开发技术中,寻找最小化的方法 重构模块的工作。在Java中,无法逃避导入到单个类中,只能逃避导入到您 一次至少可以导入整个包,以反映包是高度内聚单元的意图吗 同时减少了更改包名的工作量。

如果它弄乱了本地命名空间,那不是你的错——是包的大小造成的。

在以前的项目中,我发现将*-imports更改为特定的导入可以将编译时间减少一半(从大约10分钟减少到大约5分钟)。*-import使编译器搜索列出的每个包,以查找与您使用的类相匹配的类。虽然这段时间可能很小,但对于大项目来说,它会累积起来。

*-import的一个副作用是开发人员会复制和粘贴常用的导入行,而不是考虑他们需要什么。

导入包中的所有类被认为是一种盲目的方法。这样做的一个主要原因是,它会使类名称空间变得混乱,并可能导致具有相同名称的不同包中的类之间发生冲突。

具体地填充必要的类可以避免这个问题,并清楚地显示需要哪些版本。这有利于代码的可维护性。

以下是我关于这个话题的一些发现。

During compilation, the compiler tries to find classes that are used in the code from the .* import and the corresponding byte code will be generated by selecting the used classes from .* import. So the byte code of using .* import or .class names import will be same and the runtime performance will also be the same because of the same byte code. In each compilation, the compiler has to scan all the classes of .* package to match the classes that are actually used in the code. So, code with .* import takes more time during the compilation process as compared to using .class name imports. Using .* import helps to make code more cleaner Using .* import can create ambiguity when we use two classes of the same name from two different packages. Eg, Date is available in both packages. import java.util.*; import java.sql.*; public class DateDemo { private Date utilDate; private Date sqlDate; }