我找到了一种类似下面的方法。
public void simpleTest(Class <? extends ParentClass> myClass){
}
我不明白表达:Class <? extends ParentClass> myClass
在这里。
谁能解释一下?
我找到了一种类似下面的方法。
public void simpleTest(Class <? extends ParentClass> myClass){
}
我不明白表达:Class <? extends ParentClass> myClass
在这里。
谁能解释一下?
Class <? extends ParentClass> myClass
是一个方法参数,其类型是一个经过参数化的类,以确保传递的是一个类,该类表示某种类型是ParentClass的子类型。
即给出:
class ParentParentClass {}
class ParentClass extends ParentParentClass {}
class ChildClass extends ParentClass {}
class ChildChildClass extends ChildClass {}
public void simpleTest(Class <? extends ParentClass> myClass) {}
这些是有效的:
simpleTest(ParentClass.class);
simpleTest(ChildClass.class);
simpleTest(ChildChildClass.class);
这些是无效的,因为参数不“适合”所需的类型:
simpleTest(ParentParentClass.class);
simpleTest(String.class);
simpleTest(Date.class);
simpleTest(Object.class);
这是一个采用参数化类的通用方法。
首先考虑一个更简单的泛型示例可能会有所帮助:List<? extends ParentClass>
意味着它是一个列表,它只接受满足与 ParentClass 的 is-a 关系的对象。即List实现的参数是-一个ParentClass,但是整个东西的类型List<? extends ParentClass>
是List。
在您的示例中,只需替换“类”而不是“列表”。myClass
是一个类,即您可以使用“MyClassName.class”之类的名称调用该方法。另外,my Class的Class的参数是-a ParentClass。这基本上意味着您只能将 ParentClass 或其子类的 Class 传递给该方法。
另请参阅:http ://docs.oracle.com/javase/7/docs/api/java/lang/Class.html
来自的javadoc java.lang.Class<T>
:
T - 由该 Class 对象建模的类的类型。例如,String.class 的类型是
Class<String>
.Class<?>
如果要建模的类未知,请使用。
现在用你的类替换字符串:它是一个类型的类,它是 ParentClass 或 ParentClass 的子类。
Class myClass - 意味着 myClass 应该是 ParentClass 的子类型。
class MyClass extends ParentClass {
}
simpleTest(ParentClass.class); // this is ok
simpleTest(MyClass.class); // this is ok
class SomeOtherClass {
}
simpleTest(SomeOtherClass.class); // will result in compiler error