>Java >java지도 시간 >Java에서 일반 유형에 대한 클래스 리터럴을 어떻게 얻을 수 있습니까?

Java에서 일반 유형에 대한 클래스 리터럴을 어떻게 얻을 수 있습니까?

DDD
DDD원래의
2024-12-10 05:43:16548검색

How Can I Get Class Literals for Generic Types in Java?

Java: 일반 유형에 대한 클래스 리터럴 얻기

Java의 제네릭은 컴파일 시 유형 안전성을 허용하는 강력한 기능입니다. 그러나 이를 구현하면 일반 유형에 대한 클래스 리터럴을 얻을 때 문제가 발생합니다.

문제:

일반적으로 클래스 리터럴은 다음 구문을 사용하여 획득합니다. :

단, List와 같은 generic type의 경우에는 합병증이 발생합니다. 발생:

유형을 일반화하기 위해 와일드카드()를 추가하면 유형 불일치 오류가 발생합니다.

실제 유형 매개변수를 지정하려고 시도합니다. , List, 구문 오류가 발생합니다.

해결책:

안타깝게도 Java에서는 특정 유형 매개변수가 있는 일반 유형에 대한 클래스 리터럴을 정적으로 얻는 것이 불가능합니다. 이는 유형 삭제라는 프로세스 때문입니다.

컴파일 중에 일반 유형 정보가 제거되고 원시 유형만 남습니다. 예를 들어, List 및 List 동일한 원시 유형인 List로 변환합니다. 결과적으로 각 일반 유형 매개변수화에 대해 별도의 런타임 표현이 없습니다.

즉, 일반 유형에 대해 존재하는 유일한 클래스 리터럴은 원시 유형(예: List.class)에 대한 것입니다.

반사 및 유형 삭제:

유형 삭제는 클래스 리터럴 사용을 제한합니다. 제네릭 유형의 존재가 완전히 제거되지는 않습니다. java.lang.reflect의 Field.getGenericType() 메소드는 런타임 중에 일반 유형 정보에 대한 액세스를 제공합니다. 그러나 이 방법은 introspection에 국한되어 클래스 리터럴을 얻는 데 사용할 수 없습니다.

결론:

타입 삭제로 인해 클래스 리터럴을 얻을 수 없습니다. 제네릭 유형의 특정 매개변수화를 위한 클래스 리터럴입니다. 일반 유형의 클래스 리터럴은 항상 유형 매개변수 정보를 유지하지 않는 원시 유형을 나타냅니다.

위 내용은 Java에서 일반 유형에 대한 클래스 리터럴을 어떻게 얻을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.