자바 반사 내부 클래스
public class Outer{
public class Inner{
}
}
다음 과 같은 방법 을 통 해 Inner 류 의 유형 명 을 얻 을 수 있 습 니 다.
public class Outer{
public class Inner{
}
public static void main(String[] args){
System.out.println(Inner.class);
}
}
출력 결 과 를 보면 Inner 의 유형 명 은 xxx. xxx. Outer $Inner 라 는 형식 입 니 다.자바 에서 말 하 는 synthetic name 입 니 다.즉, 이 이름 은 소스 코드 에서 해당 하 는 파일 을 찾 을 수 없고 컴 파일 러 가 수 정 된 이름 입 니 다. 내부 클래스 를 반사 하 는 코드 는 다음 과 같 습 니 다.
public class Outer{
public class Inner{
}
public static void main(String[] args){
System.out.println(Inner.class);
// class
System.out.println(Inner.class.getConstructors().length);
//
System.out.println(Inner.class.getConstructors()[0]);
//
System.out.println(Inner.class.getConstructors()[0].newInstance(new Outer());
}
}
위 코드 의 인쇄 출력 을 통 해 알 수 있 듯 이 비정 상 내부 류 의 기본 구조 함 수 를 공개 하려 면 외곽 류 의 인 스 턴 스 가 필요 합 니 다. Public static 의 내부 클래스 라면 기본 구조 함 수 는 인삼 이 없 는 구조 함수 입 니 다.Inner 류 의 Public 키 워드 를 제거 하면 위의 코드 를 실행 하면 Inner 의 구조 함 수 를 찾 을 수 없 기 때문에 잘못 던 진 것 을 발견 할 수 있 습 니 다.이 럴 때 는 getConstructors 방법 을 getDeclared Constructors 로 바 꾸 면 됩 니 다. 내부 클래스 가 개인 이 라면 초기 화 할 때 구조 함수 의 접근 을 true 로 설정 해 야 합 니 다.다음 과 같다.
public class Outer{
private class Inner{
}
public static void main(String[] args){
System.out.println(Inner.class);
// class
System.out.println(Inner.class.getDeclaredConstructors().length);
//
Constructor c = Inner.class.getDeclaredConstructors()[0];
// c
c.setAccessible(true);
//
System.out.println(c.newInstance(new Outer());
}
}
물론 구조 류 는 자바 의 가시 성 을 따라 야 한다. 예 를 들 어 다른 종류 에 서 는 하나의 유형의 개인 내부 류 를 초기 화 할 방법 이 없다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.