在Java中列出导入的正确方式是什么?

dan*_*dle 20 java coding-style

列出您将需要的每个单独的包装(参见#1)或者从包装中导入所有内容(参见#2)会更好吗?

1

import java.awt.image.ColorModel;
import java.awt.image.ComponentColorModel;
import java.awt.image.ColorConvertOp;
Run Code Online (Sandbox Code Playgroud)

2

import java.awt.*;
Run Code Online (Sandbox Code Playgroud)

Sco*_*eld 39

只是一个风格问题; 按需导入可能导致代码在新类添加到现有包时停止编译.

基本想法(有关详细信息,请参阅http://javadude.com/articles/importondemandisevil.html.):

import java.awt.*;
import java.util.*;
...
List list;
Run Code Online (Sandbox Code Playgroud)

在Java 1.1中工作; 从Java 1.2开始,上面的代码将不再编译.

按需导入是EVIL,因为当新类添加到现有包时,您的程序可以停止编译!

总是使用显式导入.这不是风格问题; 这是一个安全问题.

如果您检查完美编译代码并且一年后有人检查它并尝试使用新类库编译它,这尤其糟糕.

(按需导入是一个非常糟糕的编程语言功能的例子 - 当新类型添加到系统时,没有任何功能可以破坏代码!)


Osc*_*Ryz 26

单独使用导入.

生产代码列出导入的每个类都要好得多.

虽然IDE在帮助您了解正在使用哪些类方面做得很好,但知道您所指的是更可读的:

java.util.List;
Run Code Online (Sandbox Code Playgroud)

并不是

java.awt.List; 
Run Code Online (Sandbox Code Playgroud)

等等.

此外,建议您按照第3方传递的核心库并以自己的项目库结束的方式将它们分组:

 import java.util.List;
 import java.util.ArrayList;
 import java.util.Date;

 import javax.swing.JFrame;
 import javax.swing.JPanel;

 import javax.swing.event.TableModelListener;

 import org.apache.commons.httpclient.cookie.CookiePolicy;
 import org.apache.commons.httpclient.cookie.CookieSpec;

 import your.own.packagename.here.SomeClass;
 import your.own.packagename.here.OtherClass;
Run Code Online (Sandbox Code Playgroud)

对于小型自我项目/类,使用通配符是可以接受的.它更快,但预计不可维护.如果涉及任何其他开发人员,请使用第一个.