嵌套静态类的Java导入通配符可访问性



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,并期望它起作用;除了*(不包括点(之外,你不可能写任何东西来实现这一点,因此,星形导入也不能实现这一目标。

相关内容

  • 没有找到相关文章

最新更新