与导入相比,使用静态导入有什么优势吗?

2022-09-01 15:03:16

请考虑以下类

public final class Constant {
  public static final String USER_NAME="user1";
  //more constant here
}

包 B 中的此类。

现在,我将在包 A 中使用它,请考虑遵循两种可以使用的方法。

方法1-使用import B.Constant

import B.Constant;

public class ValidateUser {
public static void main(String[] args) {
   if(Constant.USER_NAME.equals("user1")){

   }
  }
 }

方法 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")){

   }
 }
}

我的问题是,在这种情况下,正常导入与静态导入有什么区别或优势吗?


答案 1

normal 和 an 之间的唯一区别是,后者用于将其他类或接口(尤其是常量)的成员移动到作用域中。这取决于你是否使用它;我喜欢它,因为它使类的主体更短,但是YMMV。importimport staticstatic

使用它们没有性能优势或损失(除了可能在编译时,好像你关心这一点),因为它们编译成相同的字节码。


答案 2

主要区别在于可读性,与 相比,可读性较差。Constant.USER_NAMEUSER_NAME

文档

如果使用得当,静态导入可以通过删除类名重复的样板,使程序更具可读性。

但无论如何,尽量避免做

import static B.Constant.*;

因为它会用您导入的所有静态成员污染其命名空间。