Reflection을 사용하여 Java에서 일반 매개변수 유형 가져오기
Java에서 일반 유형은 보다 유연하고 재사용 가능한 코드를 허용하는 강력한 기능입니다. 그러나 일반 매개변수를 사용하여 작업하는 것은 때때로 까다로울 수 있습니다. 일반적인 과제 중 하나는 런타임 시 일반 매개변수의 실제 유형을 결정하는 것입니다.
가능한가요?
예, 일반 매개변수의 유형을 가져오는 것이 가능합니다. 반사를 사용하여. Reflection은 런타임 시 Java 클래스의 구조, 필드 및 메서드에 대한 세부 정보에 액세스하고 조작하는 방법을 제공합니다.
예:
다음 코드 조각을 고려하세요.
public class Voodoo { public static void chill(List<?> aListWithTypeSpiderMan) { // Here I'd like to get the Class-Object 'SpiderMan' Class typeOfTheList = ???; } public static void main(String... args) { chill(new ArrayList<SpiderMan>()); } }
chill 방식에는 알 수 없는 유형의 목록이 있습니다. 우리는 실제 유형 매개변수를 결정하려고 합니다. 이 경우에는 SpiderMan이어야 합니다.
해결책:
해결책에는 SpiderMan 유형인 ParameterizedType 인터페이스를 사용하는 것이 포함됩니다. 제네릭을 사용하는 것과 같이 매개변수화된 유형을 설명하는 유형입니다. 이를 달성하는 방법은 다음과 같습니다.
Class typeOfTheList = ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
이 코드는 매개변수화된 유형이어야 하는 현재 클래스(이 경우 Voodoo)의 슈퍼클래스를 가져온 다음 실제 유형 인수를 추출합니다. 첫 번째 유형 인수는 우리가 관심 있는 유형 매개변수인 SpiderMan에 해당합니다.
참고:
이 기술은 Java 16 이전에는 완전히 지원되지 않습니다. 제네릭 유형에 대한 리플렉션 사용은 이전에는 해킹된 것으로 간주되었지만 Java 16부터 getActualTypeArguments()가 Type 인터페이스에 추가되어 더욱 깔끔하고 효율적인 방식을 제공합니다. 일반 유형 정보에 액세스합니다.
위 내용은 리플렉션을 사용하여 Java에서 일반 매개변수 유형을 어떻게 얻을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!