有什么方法可以创建/获取并返回Class <t <?,?=“”>&gt;对象</吨<?,>

时间:2012-02-24 09:35:41

标签: java generics

我似乎把自己画成了一个有点泛色的角落。基本上我有一个通用接口X<T1, T2 extends Y<?, ?>>,其中包含一组方法,包括T1 getFirstClass()T2 getSecondClass()。这对大多数事情都很好,但我需要做的一件事就是找到这个Class的实例,这些实例是我正在查找的超类,我需要一个“全能”的对象。找不到。这意味着我最终得到了一个类似于:

的类
public class A implements X<Object, Y<?, ?>> {
    ...
    public Class<Y<?, ?>> getSecondClass() {
        return ????
    }
}

我尝试通过忽略<?, ?>位并使用在Eclipse中工作的@SuppressWarnings("rawtypes")来处理这个问题,但是当由ant构建时,会给出错误消息type parameter Y is not within its bound。 JDK 应该是相同的 - 我只知道我的系统上安装了一个,即1.6.0_23(由于我无法控制的因素,我很遗憾无法更新)。

有什么方法可以解决这个问题,还是我不得不回到绘图板并重新设计我的课程?

1 个答案:

答案 0 :(得分:1)

显然 - 由于删除 - 每个类声明Class只有一个Y.class个对象Y<F1, ..., FN>。此对象的类型为Class<Y>Y为原始类型。要将其作为Class<Y<A1, ..., AN>传递,您需要向上传播,然后向下传播:

return (Class<Y<?, ?>>)(Object) Y.class;

您可以在之前answer找到类似问题的相关JLS参考文献。