我似乎把自己画成了一个有点泛色的角落。基本上我有一个通用接口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(由于我无法控制的因素,我很遗憾无法更新)。
有什么方法可以解决这个问题,还是我不得不回到绘图板并重新设计我的课程?
答案 0 :(得分:1)
显然 - 由于删除 - 每个类声明Class
只有一个Y.class
个对象Y<F1, ..., FN>
。此对象的类型为Class<Y>
,Y
为原始类型。要将其作为Class<Y<A1, ..., AN>
传递,您需要向上传播,然后向下传播:
return (Class<Y<?, ?>>)(Object) Y.class;
您可以在之前answer找到类似问题的相关JLS参考文献。