제네릭 유형 매개 변수에서`.class` 속성을 얻으려면 어떻게해야합니까?
이 질문에 대한 대답 T
은 Generic<T>
클래스 에서의 인스턴스를 만드는 방법을 설명합니다 . 여기에는 Class<T>
매개 변수를 Generic
생성자에 전달하고 newInstance
그로부터 메소드를 호출하는 것이 포함됩니다 .
Generic<Bar>
그런 다음 의 새 인스턴스 가 생성되고 매개 변수 Bar.class
가 전달됩니다.
새 Generic
클래스 의 제네릭 유형 매개 변수 가 알려진 클래스가 Bar
아니라 그 자체가 제네릭 유형 매개 변수 인 경우 어떻게합니까? 다른 클래스 가 있고 해당 클래스 내부에서 Skeet<J>
의 새 인스턴스를 만들고 싶다고 가정 Generic<J>
합니다. 그런 다음 전달하려고 J.class
하면 다음 컴파일러 오류가 발생합니다.
cannot select from a type variable.
이 문제를 해결할 방법이 있습니까?
나를 위해 오류를 유발하는 특정 코드는 다음과 같습니다.
public class InputField<W extends Component & WidgetInterface>
extends InputFieldArray<W>
{
public InputField(String labelText)
{
super(new String[] {labelText}, W.class);
}
/* ... */
}
public class InputFieldArray<W extends Component & WidgetInterface>
extends JPanel
{
/* ... */
public InputFieldArray(String[] labelText, Class<W> clazz)
throws InstantiationException, IllegalAccessException
{
/* ... */
for (int i = 0 ; i < labelText.length ; i++) {
newLabel = new JLabel(labelText[i]);
newWidget = clazz.newInstance();
/* ... */
}
/* ... */
}
/* ... */
}
쓸 수 없기 때문에 오류가 발생합니다 W.class
. 동일한 정보를 전달하는 다른 방법이 있습니까?
사용 .class
유형 매개 변수에 허용되지 않습니다 - 때문에의 유형 삭제 , W
한 것입니다 삭제 에 Component
런타임에. InputField
다음 Class<W>
과 같이 발신자로부터 도 가져와야합니다 InputFieldArray
.
public InputField(String labelText, Class<W> clazz)
{
super(new String[] {labelText}, clazz);
}
유형 삭제로 인해 W를 사용하지 못할 수 있습니다. Class<W>
메소드에 a 가 전달되도록 요구해야합니다 . 클래스 객체를 얻고 그 제네릭은 W
공분산으로 인해 하위 클래스 만 전달되지 않도록합니다 .
public InputField(String labelText, Class<W> cls)
{
super(new String[] {labelText}, cls);
}
걸릴 수 W.class
있지만 WSubtype.class
.
GSON
라이브러리를 사용하는 경우을 T
사용하여 쉽게 유형을 얻을 수 있습니다 TypeToken
. 클래스 문서는 여기에서 사용할 수 있습니다 .
나는 이렇게했다 :
이것은 내 클래스 정의입니다.
public class ManagerGeneric <T> {}
이것은 내 방법입니다.
// Get the type of generic parameter
Type typeOfT = new TypeToken<T>(){}.getType();
// Deserialize
T data = gson.fromJson(json, typeOfT);
'development' 카테고리의 다른 글
최대 고 루틴 수 (0) | 2020.12.05 |
---|---|
준비된 문에서 테이블 이름을 매개 변수화 할 수 있습니까? (0) | 2020.12.05 |
CLion으로 C 프로젝트를 만드는 방법 (0) | 2020.12.05 |
Python 3.6의 변수 주석은 무엇입니까? (0) | 2020.12.05 |
기술 및 기능 사양 템플릿 (0) | 2020.12.05 |