传递Child.class作为参数
我有应该接收到一个Class<A>
,类似的方法:传递Child.class作为参数
protected void method(final Class<A> clazz) {
}
然后,当我试图像method(A.class)
叫它做的工作,但如果我尝试method(B.class)
,其中B
是子女A
,我收到消息“不兼容的类型”。
解决的办法是改变Class<B>
,但我还有一个孩子的,我喜欢作为参数传递给这个method()
,像C.class
。
一个解决方案是限定参数时使用有界通配符:
protected void method(final Class<? extends A> clazz) {
// Code here...
}
由此,你被允许通过直接A
的类或从A
延伸的任何类。
或者为帕夫洛·建议:
protected <T extends A> void method(final Class<T> clazz) {
// Code here...
}
双方将工作,但将有助于了解您打算如何处理clazz
这样做,我们可以选择一个比其他。
我会建议使用'protected
@PavloViazovskyy你指的是什么泛型混乱?所有你可以在类“ extends A>”上调用的是生产者方法; (例如)'A instance = clazz.getInstance();'。 –
@AndyTurner。你是对的。这是我的错误。由于'Class'没有使用消费者方法(以'T'作为参数),所以使用_Jacob_最初建议的通配符版本就足够了。 –
相关:[是列表列表的子类?为什么不是Java的泛型隐含多态?](http://*.com/q/2745265) –
Pshemo