我有一个有两个参数的方法:
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))?
答案 0 :(得分:1)
如果你可以将你的泛型指定为另一个类的扩展,你可以改为写下这样的东西:
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();
}