传递Child.class作为参数

时间:2017-04-20 21:57:42

标签: java class

我有一个应该收到Class<A>的方法,例如:

protected void method(final Class<A> clazz) {
}

然后,当我尝试像method(A.class)那样调用它确实有效,但如果我尝试method(B.class),其中BA的孩子,我会收到消息&# 34;不兼容的类型&#34;。

解决方法是更改​​为Class<B>,但我还有另一个孩子,我希望将其作为method()的参数传递,例如C.class

1 个答案:

答案 0 :(得分:5)

一种解决方案是在定义参数时使用有界通配符:

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,以便我们可以选择其中一个。