我有一个方法应该收到一个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.
一种解决方案是在定义参数时使用有界通配符:
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以便我们可以选择一个而不是另一个.
| 归档时间: |
|
| 查看次数: |
946 次 |
| 最近记录: |