> Java > java지도 시간 > 본문

런타임 시 일반 유형의 클래스를 어떻게 확인할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-11-19 02:12:02
원래의
470명이 탐색했습니다.

How Can You Determine the Class of a Generic Type at Runtime?

제네릭 유형의 클래스 결정

제네릭 프로그래밍 영역에서는 제네릭 유형의 클래스를 확인하는 것이 필수적일 수 있습니다. 활용되고 있습니다. 그러나 제네릭의 특성과 마찬가지로 유형 정보는 일반적으로 런타임 시 지워지므로 나중에 검색할 때 문제가 발생합니다.

예:

다음 제네릭을 고려하세요. class:

public class MyGenericClass<T> {
  public void doSomething() {
    // ...
    T bean = (T)someObject.create(T.class);
    // ...
  }
}
로그인 후 복사

위의 예에서는 클래스 리터럴을 전달하여 클래스 T의 인스턴스를 생성하려고 시도합니다. 그러나 일반 유형을 클래스 리터럴로 사용하려는 시도는 금지되어 있으므로 "유형 매개변수 T에 대한 잘못된 클래스 리터럴" 오류가 발생합니다.

해결 방법:

이 문제를 극복하기 위한 실행 가능한 해결 방법은 제네릭 유형의 클래스를 매개변수로 정적 메서드에 전달하는 것입니다. 그런 다음 이 메소드는 리플렉션 API를 사용하여 제네릭 유형을 인스턴스화합니다.

public class MyGenericClass<T> {

    private final Class<T> clazz;

    public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) {
        return new MyGenericClass<>(clazz);
    }

    protected MyGenericClass(Class<T> clazz) {
        this.clazz = clazz;
    }

    public void doSomething() {
        T instance = clazz.newInstance();
    }
}
로그인 후 복사

이 접근 방식을 따르면 제네릭 유형을 클래스 리터럴로 사용하는 것에 대한 제한을 우회하여 필요한 유형 정보를 런타임에 사용할 수 있도록 보장합니다. . 이는 우아하지 않은 솔루션일 수 있지만 원래 예에 제시된 것과 같은 어려운 상황에서 제네릭 유형의 클래스를 결정하는 방법을 제공합니다.

위 내용은 런타임 시 일반 유형의 클래스를 어떻게 확인할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿