0

我找到了一种类似下面的方法。

public void simpleTest(Class <? extends ParentClass> myClass){

}

我不明白表达:Class <? extends ParentClass> myClass在这里。

谁能解释一下?

4

4 回答 4

5

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);
于 2013-05-27T17:42:48.247 回答
0

这是一个采用参数化类的通用方法。

首先考虑一个更简单的泛型示例可能会有所帮助: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

于 2013-05-27T17:59:24.770 回答
0

来自的javadoc java.lang.Class<T>

T - 由该 Class 对象建模的类的类型。例如,String.class 的类型是Class<String>. Class<?>如果要建模的类未知,请使用。

现在用你的类替换字符串:它是一个类型的,它是 ParentClass 或 ParentClass 的子类。

于 2013-05-27T17:41:06.827 回答
0

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
于 2013-05-27T17:44:24.800 回答