Ruc*_*era 23 java import static-import
考虑以下课程
public final class Constant {
public static final String USER_NAME="user1";
//more constant here
}
Run Code Online (Sandbox Code Playgroud)
这个类在包B中.
现在我将在包A中使用它.考虑以下两种可以使用的方法.
方法1-使用 import B.Constant
import B.Constant;
public class ValidateUser {
public static void main(String[] args) {
if(Constant.USER_NAME.equals("user1")){
}
}
}
Run Code Online (Sandbox Code Playgroud)
方法2-使用 import static B.Constant.USER_NAME;
import static B.Constant.USER_NAME;
public class ValidateUser {
public static void main(String[] args) {
if(USER_NAME.equals("user1")){
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,在这种情况下,静态导入是否有任何差异或优势?
Don*_*ows 30
normal import和a之间的唯一区别import static是后者用于将static某些其他类或接口的成员(尤其是常量)移动到范围内.你是否使用它取决于你; 我喜欢它,因为它让班级的身体更短,但是YMMV.
在编译成相同的字节码时,使用它们没有性能优势或惩罚(除了可能在编译时,就好像你关心它).
我很少使用静态导入,只是在实际使代码更容易理解的地方.
根据oracle:
http://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html
那么什么时候应该使用静态导入?非常谨慎!只有在您试图声明常量的本地副本或滥用继承(Constant Interface Antipattern)时才使用它.换句话说,当您需要频繁访问来自一个或两个类的静态成员时,请使用它.如果过度使用静态导入功能,它可能会使您的程序无法读取且无法维护,并使用您导入的所有静态成员污染其命名空间.您的代码的读者(包括您,在您编写它几个月后)将不知道静态成员来自哪个类.从类中导入所有静态成员对可读性特别有害; 如果您只需要一个或两个成员,请单独导入它们.适当使用,静态导入可以使您的程序更具可读性,
这里需要注意的重点:
评论者@Donal Fellows恰当地说,使用IDE来管理静态导入的风险较小.我同意现代IDE已经走过了漫长的道路,并将消除管理依赖性和追踪方法调用回到父母的许多痛苦.