在运行时使用类对象定义泛型类型



是否可以使用类对象声明泛型的类型?

例如,我想做这样的事情:

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或其他什么)。

相关内容

  • 没有找到相关文章

最新更新