패키지 안에 중첩 공공 정적 클래스의 접근성 나는 두 개의 패키지가 있습니다 package1
클래스 A
(public으로 선언 NOT)과 중첩 정적 클래스 B
을 포함 (public으로 선언) :반사 - 지역 클래스 내 예에서
package package1;
class A {
public static class B {
public B() {
}
}
public A() {
}
}
package2
는 반 성적 클래스 package1.A$B
의 인스턴스를 만들려고 간단한 주요 방법으로 Main
클래스를 포함 :
package package2;
public class Main {
public static void main(String[] args) {
try {
Class<?> innerClass = Class.forName("package1.A$B");
Object o = innerClass.newInstance();
System.out.println(o);
} catch (ReflectiveOperationException e) {
e.printStackTrace();
}
}
}
Surprisin gly (적어도 나를 위해), 코드 의이 조각은 반사 없이는 불가능한 일을 성공합니다. 클래식 import
문 (예 : import package1.A.B;
또는 import package1.A.*;
)은 클래스 A
이 보이지 않는다는 오류를 발생시킵니다. 또한 B
의 인스턴스를 만들 때 특수 액세스 권한이 필요하지 않습니다. 정상적인 행동입니까?
편집 : 나는 다른 방법으로 내부 클래스에 대한 참조를 얻을 경우이 같은도 작동합니다
Class<?> innerClass = Class.forName("package1.A").getClasses()[0];
비공개'A' 클래스는 어떻게 만들 수 있습니까? 다른 공용 클래스의 일부입니까? – sanbhat
"공개적이지 않다"는 말은 기본 (패키지) 가시성을 의미합니다. – maurizeio