传递Child.class作为参数

Dav*_*ues 2 java class

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

protected void method(final Class<A> clazz) {
}
Run Code Online (Sandbox Code Playgroud)

然后,当我尝试调用method(A.class)它确实有效,但如果我尝试method(B.class),B孩子在哪里A,我得到消息"不兼容的类型".

解决方案是改变Class<B>,但我有另一个孩子,我喜欢作为参数传递method(),如C.class.

Jac*_* G. 6

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

protected void method(final Class<? extends A> clazz) {
    // Code here...
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以A直接传递类或任何扩展类A.

或者像帕夫洛建议的那样:

protected <T extends A> void method(final Class<T> clazz) {
    // Code here...
}
Run Code Online (Sandbox Code Playgroud)

两者都有效,但它有助于了解您打算做什么,clazz以便我们可以选择一个而不是另一个.

  • 我建议使用`protected <T extends Number> void方法(最终的Class <T> clazz)`将是更好的事件,因为当你试图调用`clazz`上的方法时,它允许你避免使用通配符. (4认同)