java可访问性(或者范围(如何与类型导入多级嵌套类相关?一个例子:
ClassA.java:
package com.oracle.javatests;
public class ClassA {
public static class NestedAA {
public void printSomething() {
System.out.println("inside " + this.getClass().getName());
}
public static class NestedAB{
public void printSomethingAB() {
System.out.println("inside " + this.getClass().getName());
}
}
}
public void printSomething() {
System.out.println("inside " + this.getClass().getName());
}
}
Main.java
package com.oracle.javatests;
import com.oracle.javatests.ClassA.*;
// import com.oracle.javatests.ClassA.NestedAA.*; // Adding this will resolve NestedAB
public class Main {
public static void main (String[] args){
ClassA objA = new ClassA();
objA.printSomething();
NestedAA nestedAA = new NestedAA(); // Ok
NestedAB nestedAB = new NestedAB(); // Compiler error- NestedAB cannot be resolved to a type
}
}
使用通配符时,import语句不导入NestedAB类型。一个可能类似的问题让我看到了java规范表,它澄清了Type Import on Demand Declarations:
类型导入按需声明允许根据需要导入的命名包或类型。
接受的问题答案意味着按需导入声明不是递归的。原因可能是Java认为的";命名类型的所有可访问类型";,以及包的一般概念,但我还没有将这些点联系起来,也没有理解可访问类型对嵌套类意味着什么。
请任何人帮助解释类型导入和可访问性在java中是如何工作的(同时忽略通配符导入的可论证使用(
听不懂。CCD_ 1与CCD_ 2完全相同。
换言之,在您的示例中,使用import static pkg.ClassA.*;
,您可以只编写不带限定符的NestedAA
,这是有效的,因为import static pkg.ClassA.NestedAA;
会使其发挥同样的作用。
您不能不合格地编写NestedAB
,并期望它起作用;除了*(不包括点(之外,你不可能写任何东西来实现这一点,因此,星形导入也不能实现这一目标。