我有一个方法,我想接受必须扩展抽象类的类类型。以下两种写法有什么区别?
<T extends AbstractClass> void myMethod(Class<T> clazz);
void myMethod(Class<? extends AbstractClass> clazz);
在第二种情况下,我将无法在方法内直接引用该类型。这两种方法可以传递哪些类类型,是否有区别?
我有一个方法,我想接受必须扩展抽象类的类类型。以下两种写法有什么区别?
<T extends AbstractClass> void myMethod(Class<T> clazz);
void myMethod(Class<? extends AbstractClass> clazz);
在第二种情况下,我将无法在方法内直接引用该类型。这两种方法可以传递哪些类类型,是否有区别?
不,你提供的这两个方法签名兼容的参数类型是没有区别的。如果需要引用参数所表示的确切类型,我个人会使用带参数的版本,但如果不需要,则建议使用通配符版本。
<T extends AbstractClass> T myMethod(Class<T> clazz);
并将其用作以下方式:
Subclass parameterInstance =...
Subclass i1 = myMethod(parameterInstance.getClass());