반사 메커니즘은 java.lang.reflect 패키지의 클래스를 통해 일반 유형을 처리합니다. 유형 가져오기: 유형 인터페이스를 사용하여 Java 유형을 나타냅니다. 일반 매개변수 가져오기: 매개변수화된 유형의 경우 TypeVariable 인터페이스를 사용하여 일반 매개변수를 가져옵니다. 유형 경계 가져오기: TypeVariable 인터페이스는 일반 매개변수의 유형 경계를 가져오는 메소드를 제공합니다.
소개
Java 리플렉션 메커니즘을 사용하면 프로그램이 런타임 시 클래스의 구조와 동작을 검사하고 수정할 수 있습니다. 클래스와 객체의 메타데이터를 반영하여 이를 수행합니다. 제네릭 유형을 처리하는 것은 유형 삭제를 포함하기 때문에 반영하기가 어렵습니다.
유형 삭제
Java에서는 일반 유형이 컴파일 타임에 삭제됩니다. 이는 일반 유형 정보가 런타임 시 유지되지 않음을 의미합니다. 예:
List<String> myList = new ArrayList<>();
런타임에 myList
는 일반 유형 정보가 없는 일반 ArrayList
가 됩니다. myList
将是一个普通的 ArrayList
,不包含任何泛型类型信息。
反射机制和泛型类型
反射机制通过使用 java.lang.reflect
包中的类来处理泛型类型。可以通过以下步骤获取泛型类型信息:
Type
接口来表示 Java 类型。TypeVariable
接口来获取其泛型参数。TypeVariable
接口提供了方法来获取泛型参数的类型界限。实战案例
以下示例演示了如何使用反射机制获取泛型类型信息:
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { // 创建一个泛型类型对象 List<String> myList = new ArrayList<>(); // 获取类型 Type type = myList.getClass().getGenericSuperclass(); // 检查类型是否为参数化类型 if (type instanceof ParameterizedType) { // 获取泛型参数 Type[] actualTypes = ((ParameterizedType) type).getActualTypeArguments(); // 打印泛型参数的类型 for (Type actualType : actualTypes) { System.out.println(actualType.getTypeName()); } } } }
在该示例中,我们获取 myList
java.lang.reflect
패키지의 클래스를 사용하여 일반 유형을 처리합니다. 일반 유형 정보는 다음 단계를 통해 얻을 수 있습니다. 🎜Type
인터페이스를 사용하여 Java 유형을 나타냅니다. TypeVariable
인터페이스를 사용하여 일반 매개변수를 가져올 수 있습니다. TypeVariable
인터페이스는 일반 매개변수의 유형 경계를 가져오는 메서드를 제공합니다. java.lang.String🎜이 예에서는
myList의 일반 유형을 얻습니다. code> 유형을 입력하고 해당 유형 이름을 인쇄합니다. 출력 결과는 다음과 같습니다: 🎜rrreee
위 내용은 Java 리플렉션 메커니즘은 일반 유형을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!