Как работает доступность 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());
}
}
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
}
}
Оператор импорта не импортирует тип NestedAB при использовании подстановочных знаков. Возможно, похожий вопрос привел меня к спецификации java, которая разъясняет тип-импорт-по-запросу Объявления :
Объявление type-import-on-demand позволяет импортировать все доступные типы именованного пакета или типа по мере необходимости.
Принятый ответ на вопрос подразумевает, что декларации импорта по запросу не являются рекурсивными. Причина, возможно, заключается в том, что Java рассматривает все доступные типы именованного типа и общая концепция пакетов, но мне не удается соединить точки и понять, что означают доступные типы по отношению к вложенным классам.
Может ли кто-нибудь помочь объяснить, как импорт и доступность типа работают в java (игнорируя спорное использование импорта подстановочных знаков)