Java Reflection Learning <BR>소위 리플렉션은 런타임 중에 객체 유형 정보를 얻는 작업으로 이해될 수 있습니다. 전통적인 프로그래밍 방법에서는 프로그래머가 컴파일 단계에서 사용할 유형을 결정해야 하지만 리플렉션의 도움으로 프로그래머는 이 정보를 동적으로 얻고 더 이식 가능한 코드를 작성할 수 있습니다. 엄밀히 말하면 리플렉션 메커니즘은 모든 언어로 구현될 수 있기 때문에 리플렉션은 프로그래밍 언어의 기능이 아니지만 프로그래밍 언어 자체가 리플렉션을 지원하면 리플렉션 구현이 훨씬 더 편리해집니다.
1. 유형 클래스 얻기 <BR>우리는 Java의 모든 것이 객체이고 우리가 일반적으로 사용하는 객체는 Object 클래스에서 직접 또는 간접적으로 상속한다는 것을 알고 있습니다. Object 클래스에는 인스턴스의 유형 클래스를 얻는 데 사용할 수 있는 getClass라는 메소드가 포함되어 있습니다. 유형 클래스는 유형을 나타내는 클래스를 말합니다. 모든 것이 객체이고 유형도 예외가 아니기 때문입니다. Java에서 유형 클래스는 유형을 나타내는 데 사용됩니다. 모든 유형 클래스는 Class 클래스의 인스턴스입니다. 예를 들어, 다음 코드 부분은 다음과 같습니다.
A a = 새로운 A();
if(a.getClass()==A.class)
System.out.println("같음");
else System.out.println("같지 않음");
결과는 "같음"으로 인쇄됩니다.
객체 a는 A의 특정 클래스인 A의 인스턴스임을 알 수 있다. if 문에서 a.getClass()를 사용하여 반환된 결과는 정확히 A의 타입 클래스이다. Java에서는 "Type.class" 메소드를 사용할 수 있습니다. a.getClass()가 A의 유형 클래스인 A.class를 가져오기 때문에 위 코드를 실행하면 "equal"이 출력되기 때문입니다. 특히 유형 클래스는 상위 클래스의 유형 클래스와 하위 클래스의 유형 클래스가 서로 다릅니다. 따라서 A가 B의 하위 클래스라고 가정하면 다음 코드는 다음과 같은 출력을 얻습니다. "같지 않은":
A a = 새로운 A();
if(a.getClass()==B.class)
System.out.println("같음");
else System.out.println("같지 않음");
따라서 인스턴스를 알고 있으면 인스턴스의 "getClass()" 메서드를 사용하여 해당 개체의 유형 클래스를 가져올 수 있고, 유형을 알고 있으면 ".class" 메서드를 사용하여 해당 유형의 유형 클래스를 가져올 수 있습니다. .
2. 유형 정보 얻기 <BR>유형 클래스를 얻은 후, 유형 정보를 얻기 위해 몇 가지 메소드를 호출할 수 있습니다.
getName():String: 유형의 전체 이름을 가져옵니다.
getSuperClass():Class: 이 유형의 직접 상위 클래스를 가져옵니다. 유형에 직접 상위 클래스가 없으면 null을 반환합니다.
getInterfaces():Class[]: 이 유형으로 구현된 모든 인터페이스를 가져옵니다.
isArray():boolean: 유형이 배열인지 확인합니다.
isEnum():boolean: 유형이 열거 유형인지 확인합니다.
isInterface():boolean: 유형이 인터페이스인지 확인합니다.
isPrimitive():boolean: 해당 유형이 기본 유형인지, 즉 int, boolean, double 등인지 확인합니다.
isAssignableFrom(Class cls):boolean: 이 유형이 cls 유형의 상위(상위) 클래스인지 상위(상위) 인터페이스인지 확인합니다.
getComponentType():Class: 유형이 배열인 경우 배열의 구성요소 유형을 반환합니다.
또한 유형 변환과 같은 작업도 수행할 수 있습니다. 주요 방법은 다음과 같습니다.
asSubclass(Class clazz):Class: 이 유형을 변경합니다.