제네릭 프로그래밍 영역에서는 현재 사용 중인 제네릭 유형의 특정 클래스를 결정하는 것이 종종 중요합니다. 사용. 그러나 Java의 제네릭 유형 삭제 메커니즘은 이러한 노력에 도전 과제를 제기합니다.
이 문제를 해결하기 위해 실제 시나리오를 모방한 예를 살펴보겠습니다.
public class MyGenericClass<T> { public void doSomething() { // Imagine a 3rd party library call that expects a Class object T bean = (T) someObject.create(T.class); } }
안타깝게도 위 코드는 "유형 매개변수 T에 대한 잘못된 클래스 리터럴" 오류와 함께 실패합니다. 런타임 시 제네릭 타입 정보가 지워져 T.class의 직접적인 사용이 불가능하기 때문입니다.
그렇다면 어떻게 이 장애물을 극복할 수 있을까요? 실행 가능한 솔루션으로 해결 방법이 나타났습니다. 원하는 클래스를 매개변수로 받아들이는 정적 팩토리 메서드를 도입하는 것입니다.
public class MyGenericClass<T> { private final Class<T> clazz; public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) { return new MyGenericClass<>(clazz); } private MyGenericClass(Class<T> clazz) { this.clazz = clazz; } public void doSomething() { T instance = clazz.newInstance(); } }
이 접근 방식을 사용하면 객체 생성 중에 일반 클래스를 명시적으로 지정할 수 있으므로 런타임 삭제를 효과적으로 우회할 수 있습니다. 문제. 그러나 여기에는 단점이 있습니다. 일부 상용구 코드가 추가되고 API가 약간 복잡해집니다. 그럼에도 불구하고 클래스 유형을 결정해야 하는 경우에는 여전히 효과적인 해결 방법입니다.
위 내용은 Java에서 일반 유형의 클래스를 결정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!