0

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

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

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() 方法,该方法将返回属性类型的对象。

4

2 回答 2

3

我不知道是否有办法编译类似的东西,但它没有什么价值。

认为由于类型擦除,编译的类不使用泛型信息。也就是说,做 a对于在编译时Set<String> a = new Set<String>();检查使用是有用的a,但在运行时不是。

所以,你想实例化一个 Generic,它的类型只在运行时知道,但在运行时它不会被使用。

于 2012-10-08T08:52:17.517 回答
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类型或其他类型)。

于 2012-10-08T08:52:39.000 回答