我有一个应该收到Class<A>
的方法,例如:
protected void method(final Class<A> clazz) {
}
然后,当我尝试像method(A.class)
那样调用它确实有效,但如果我尝试method(B.class)
,其中B
是A
的孩子,我会收到消息&# 34;不兼容的类型&#34;。
解决方法是更改为Class<B>
,但我还有另一个孩子,我希望将其作为method()
的参数传递,例如C.class
。
答案 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
,以便我们可以选择其中一个。