gpt4 book ai didi

JAVA - 获取类的通用实现

转载 作者:搜寻专家 更新时间:2023-11-01 01:12:37 27 4
gpt4 key购买 nike

假设我有一个定义通用类型的抽象类。所有子类都将实现此通用类型。

我可以通过声明一个强制子类返回该类型的抽象方法来实现这一点。但是有没有更优雅的方法可以直接从子类的“类”对象定义中实现这一点?

public class GenericTest {
public static void main(String[]args) throws Exception{
Class strClass = ClazzImplString.class;
Class intClass = ClazzImplInteger.class;

Class implTypeStr = ((AbsClazz)strClass.getConstructor().newInstance()).getGenericType();
Class implTypeInt = ((AbsClazz)intClass.getConstructor().newInstance()).getGenericType();

System.out.println("implTypeStr: " + implTypeStr);
System.out.println("implTypeInt: " + implTypeInt);
}
}
abstract class AbsClazz<GenericType> {
abstract Class getGenericType();
}

class ClazzImplString extends AbsClazz<String> {
public ClazzImplString() {}
@Override Class getGenericType() {return String.class;}
}
class ClazzImplInteger extends AbsClazz<Integer> {
public ClazzImplInteger() {}
@Override Class getGenericType() {return Integer.class;}
}

提前致谢

最佳答案

是的,您可以使用 reflection .

ParameterizedType genericSuperclass = (ParameterizedType) ClazzImplString.class.getGenericSuperclass();
Class<?> clazz = (Class<?>) genericSuperclass.getActualTypeArguments()[0];
System.out.println(clazz); // prints class java.lang.String

关于JAVA - 获取类的通用实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28004159/

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