什么类<! - ?扩展ParentClass - >是什么意思?

时间:2013-05-27 17:37:22

标签: java

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

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

}

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

任何人都可以解释一下吗?

4 个答案:

答案 0 :(得分:5)

Class <? extends ParentClass> myClass是一个method argument,其类型为Class parameterized,以确保传递的内容是一个代表{{3}类型的类} 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);

答案 1 :(得分:0)

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

  

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

现在用你的类替换String:它是一个类型的Class,它是ParentClass或ParentClass的子类。

答案 2 :(得分:0)

类myClass - 表示myClass应该是Parent Class的子类型。

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

答案 3 :(得分:0)

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

首先考虑一个更简单的泛型示例可能会有所帮助:List<? extends ParentClass>表示它只是一个List,它只接受满足与ParentClass的is-a关系的对象。即List实现的参数是一个ParentClass,但整个事件List<? extends ParentClass>的类型是List。

在您的示例中,只需替换“Class”而不是“List”。 myClass是一个类,即您可以使用类似“MyClassName.class”的方法调用该方法。此外,我的类的类的参数是一个ParentClass。这基本上意味着您只能将Class of ParentClass或其子类传递给该方法。

另请参阅:http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html

相关问题