我有一个方法,它返回一个List<Property<?>>
。
Property
是一个具有一个泛型参数的类型:
public class Property<T extends Comparable<T>> { ... }
我有一个混合类型属性的列表,我无法知道特定元素的类型参数。
我想做这样的事情:
List<Property<?>> list = getList();
for(Property<?> crt : list)
{
PropertyWrapper<?> crtWrapper = new PropertyWrapper(crt.getGenericType());
// I know this doesn't exist ----^
}
简单来说,我需要
PropertyWrapper
与当前的Property
有相同的通用模板参数。有任何方法可以做到这一点吗?我可以应用https://dev59.com/vnA75IYBdhLWcg3wKluM#3437930中提到的建议,但即使我这样做了,如何实例化适当的
PropertyWrapper<XXX>
,只有一个Class<T>
实例呢?如果需要,我可以修改
Property<?>
。 我也不介意使用反射(我认为需要使用反射)。
编辑:我忘记了一些东西。 实际上,我无法通过以下行实例化包装器:
PropertyWrapper<?> crtWrapper = new PropertyWrapper(crt.getGenericType());
因为我有专门的子类(PropertyWrapper_String
)。
现在我看到两种可能性:
1:通过字符串实例化类:
String strGenericType = "";
Class<?> wrapperClass = Class.forName("PropertyWrapper_" + strGenericType);
2: 有没有办法在不创建子类的情况下专门化一个通用类?
非常感谢您提前的建议。
new PropertyWrapper(crt.getGenericType());
的时候,我们可以理解为你的意思是要写成new PropertyWrapper<crt.getGenericType()>();
吗? - John BPropertyWrapper<?>
,那么构造函数使用<>
运算符似乎是有意义的。 - John BMap<Class<?>, Class<?>>
进行映射,其中键是被包装的类String
,值是包装器PropertyWrapper_String
。 - John B