gpt4 book ai didi

java - 扩展后如何获取父类中的T类型?

转载 作者:行者123 更新时间:2023-12-01 16:42:33 25 4
gpt4 key购买 nike

extend后如何获取T类型?

下面的代码。

class A<T>{
void method(){
// how to get T type ?
}
}

class B extends A<String> {
}

class C extends B {
}

class D<T> extends A<List<T>>{

}

class E extends D<String>{
}

class Main{
public static void main(String[] args){
C c = new C();
c.method();// I want to get T type here is String.
E e = new E();
e.method();// I want to get T type here is List<String> but I can only get String.
}
}

如果我创建一个 B,我可以使用 getGenericSupperclass 来获取 T,但是当我创建一个 C 时,我不能。

最佳答案

您应该使用 A 的构造函数传递泛型类型的对象,或者创建一个返回对象的抽象方法。
然后,您的方法使用该对象来获取类。

使用构造函数传递对象:

class A<T>{

private T dummy;

public A(T dummy){
this.dummy = dummy;
}

void method(){
System.out.println("Our type T is a " + dummy.getClass().getName());
}
}

使用抽象方法:

abstract class A<T>{

public abstract T getDummy();

void method(){
System.out.println("Our type T is a " + getDummy().getClass().getName());
}
}

各种解决方案也可以传递 T 类,而不是 T 的实例。
例如:

abstract class A<T>{

public abstract Class<T> getGenericClass();

void method(){
System.out.println("Our type T is a " + getGenericClass().getName());
}
}

就我个人而言,我更喜欢这个解决方案。

当然,所有派生类都应该进行调整。
例如:

class B extends A<String> {

@Override
public Class<String> getGenericClass(){
return String.class;
}
}

关于java - 扩展后如何获取父类中的T类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60484627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com