是否可以使用类对象声明泛型的类型?
例如,我想做这样的事情:
Class returnType = theMethod.getReturnType();
AttributeComponent<returnType> attComponent;
attComponent = new AttributeComponent<returnType>(returnType, attName);
attributeComponents.put(methodName.substring(3), attComponent);
现在我知道这显然是不正确的,但有没有办法实现这个目标?
编辑:解释一下
我正在使用反射遍历所有getter,然后为每个属性生成一个UI元素(AttributeComponent类,它有一个JComponent元素和一个JLabel)。我想使用泛型来创建一个getValue()方法,该方法将返回属性类型的对象。
答案 0 :(得分:3)
我不知道是否有办法编译类似的东西,但它没什么价值。
认为由于类型擦除,编译后的类不使用泛型信息。也就是说,执行Set<String> a = new Set<String>();
对于在编译时检查a
的使用非常有用,但在运行时则不行。
因此,您希望实例化一个Generic,其类型仅在运行时已知,但在运行时它将不会被使用。
答案 1 :(得分:2)
我想说这可以通过将方法返回类型定义为泛型来实现;但是你需要将实际类型作为类参数传递给你,就像你已经显示的那样:
<T> T yourMethod(Class<T> returnType) {
// use <T> as generic and returnType to refer to the actual T class
/* ... */ new AttributeComponent<T>(returnType, attName);
}
查看您正在尝试执行的操作的更大背景也很有用。如果你希望AttributeComponent.getValue()
返回一些泛型类型T
(这是方法返回类型),除非你在编译时知道每个方法的返回类型,否则它是完全无用的,否则T
将是无效的超过Object
。在上面的示例中,您使用您已经知道的类调用yourMethod
,并返回相同的类型(或该类型的某些AttributeComponent
或其他)。