java 可访问性(或者可能是范围)对于类型导入多级嵌套类是如何工作的?一个例子:
类A.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());
}
}
主.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 类型。一个可能类似的问题让我看到了阐明Type-Import-on-Demand 声明的 java 规范表:
按需类型导入声明允许根据需要导入命名包或类型的所有可访问类型。
该问题的公认答案意味着按需进口声明不是递归的。推理可能是 Java 所认为的“命名类型的所有可访问类型”,以及包的一般概念,但我没有连接这些点,也没有理解可访问类型对于嵌套类的含义。
可以请任何人帮助解释类型导入和可访问性在 java 中是如何工作的(同时忽略通配符导入的有争议的使用)