繁体   English   中英

使用递归调用确定泛型类型

[英]Determine Generic type with recursive call

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

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。 我想为集合中的每个项目递归地调用它自己的方法。 我的问题是,我无法指定返回类型,因为我无法弄清楚我收到的集合的返回类型。 像这样(没有反射的伪代码):

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();
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM