gpt4 book ai didi

java - 通过递归调用确定泛型类型

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

我有一个有两个参数的方法:

public <P, T> T getT(P p, Class<T> returnType) {
//This method converts p to an instance of the type T.
}

或多或少,代码遍历了 returnType 的所有 setter 并调用 p 上的 getter 方法:

T t = new T();
t.setBla(p.getBla());

现在,在循环 T 类的所有 setter 时,我遇到了一个 Collection。我想为集合中的每个项目递归调用它自己的方法。我的问题是,我无法指定返回类型,因为我无法弄清楚我收到的 Collection 的返回类型。像这样的东西(没有反射的伪代码):

for(Object o : list) {
return getT(o, ???);
}

我尝试使用自定义注释来解决这个问题,其中我指定了该集合的 returnType,但我无法在注释中使用泛型:

public @interface ReturnType {
public Class<?> value();
}

所以我的 getT() 中的参数不匹配。如何在不更改 getT() 方法的通用类型(getT(P p, Class t))的情况下解决此问题?

最佳答案

如果您可以将泛型指定为另一个类的扩展,则可以编写如下内容:

public <P, T> T getT(P p, Class<T extends SomeClass> returnType){
//code
}

然后

for(Object o : list) {
return getT(o, SomeClass.class);
}

public @interface ReturnType { 
public Class<SomeClass> value();
}

关于java - 通过递归调用确定泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41695786/

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