gpt4 book ai didi

java - 从该方法参数的属性获取方法返回类型

转载 作者:行者123 更新时间:2023-11-30 06:14:28 25 4
gpt4 key购买 nike

我有一个带有内部类属性的类 C:

public class C{
private Class<?> clazz;

public void setClazz(Class<?> c){
this.clazz = c;
}

public Class<?> getClazz(){
return clazz;
}
}

我想在另一个类中声明一个方法,这样它的返回类型就是 C.clazz 的类型:

public class D{
public <T> T getInstance(C c){
//doesn't compile
//some reflective code to set T to c.getClazz?
return (c.getClazz.newInstance());
}
}

例如,getInstance(c),其中 c 的 clazz 设置为 Class<B> , 会返回一个新的 B 实例。有没有办法通过反射来做到这一点?

最佳答案

class C<T>{
private final Class<T> clazz;

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

public Class<T> getClazz(){
return clazz;
}
}

class D{
public <T> T getInstance(C<T> t) throws IllegalAccessException, InstantiationException {
return t.getClazz().newInstance();
}
}


public static void main() throws Exception {
C<String> c = new C<>(String.class);
D d = new D();
String s = d.getInstance(c);
System.out.println("String = " + s);
}

这也是一种经典的存储泛型类型信息的方式。但我不明白为什么你会想要 D 中的 getInstace 方法。我宁愿让它成为 C 中的静态方法。

即使它是一个数组,你也可以采用类似的策略 java.lang.reflect.Array.newInstance(t.getClazz(),10); 而不仅仅是 t.getClazz ().newInstance()

甚至还有其他方法可以捕获泛型类型信息。 Read这适用于更复杂的东西。

关于java - 从该方法参数的属性获取方法返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30328116/

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