是否可以使用类对象声明泛型的类型?
例如,我想做这样的事情:
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() 方法。
我不知道是否有办法编译这样的东西,但它没有什么价值。
认为由于类型擦除,编译的类不使用泛型信息。也就是说,执行Set<String> a = new Set<String>();
对于在编译时检查a
的使用情况很有用,但在运行时则不然。
因此,您希望实例化一个泛型,其类型仅在运行时已知,但在运行时不会使用。
我想说这可以通过将方法返回类型定义为泛型来实现;但是您需要将实际类型作为类参数传递才能使用它,就像您所示的那样:
<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
或其他什么)。