我正在对类 Long 和 Integer 的成员进行静态导入:
import static java.lang.Integer.MAX_VALUE;
import static java.lang.Long.MAX_VALUE;
现在,如果我尝试使用此变量MAX_VALUE并打印它,我会得到一个错误:
import static java.lang.Integer.MAX_VALUE;
import static java.lang.Long.MAX_VALUE;
public class StaticImportDemo2 {
public static void main(String[] args) {
//Error :: The field MAX_VALUE is ambiguous
System.out.println("Print without static import Integer.MAX_VALUE "+MAX_VALUE);
}
}
这很好。要消除错误,我将不得不删除一个静态导入来解决这种歧义。
我遇到的主要问题是,如果我在整数类中使用通配符*
静态导入,类编译时没有错误:
import static java.lang.System.out;
import static java.lang.Integer.*;
import static java.lang.Long.MAX_VALUE;
public class StaticImportDemo2 {
public static void main(String[] args) {
System.out.println("Print without static import Integer.MAX_VALUE " + MAX_VALUE);
}
}
模棱两可必须仍然存在。为什么编译没有问题?
为什么编译没有问题?
因为Java语言规范说它确实如此。请参阅第 6 章和第 7 章,但特别是来自 6.4.1:
按需类型导入声明不会导致任何其他声明被隐藏。
按需静态导入声明不会导致任何其他声明被遮蔽。
这可能是因为能够通配符导入整个包非常方便,但有时您必须解决冲突。如果唯一的选择是显式导入每个项目,那会很糟糕(特别是在 IDE 之前的日子里(。因此,特定(非通配符(导入被优先考虑。这样,您只需为要使用的模棱两可的项目指定您的意思。