我發現了一個如下所示的方法。Class <?繼承父類>是什麼意思?
public void simpleTest(Class <? extends ParentClass> myClass){
}
我不明白的表達:Class <? extends ParentClass> myClass
這裏。
誰能解釋一下嗎?
我發現了一個如下所示的方法。Class <?繼承父類>是什麼意思?
public void simpleTest(Class <? extends ParentClass> myClass){
}
我不明白的表達:Class <? extends ParentClass> myClass
這裏。
誰能解釋一下嗎?
Class <? extends ParentClass> myClass
是method argument,其類型爲Class是parameterized保證什麼傳遞是表示某種類型的父類是一個subtype一類。
即給定:
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);
從java.lang.Class<T>
的Javadoc:
筆 - 此Class對象建模的類的類型。例如,String.class的類型是
Class<String>
。如果正在建模的類未知,則使用Class<?>
。
現在將String替換爲您的類:它是一個類型爲Class的ParentClass或ParentClass的子類。
類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
這是一個採用參數化類的通用方法。
首先考慮一個更簡單的泛型例子可能會有所幫助:List<? extends ParentClass>
意味着它是一個僅使用滿足與ParentClass的is-a關係的對象的List。即List實現的參數是一個ParentClass,但是整個事物List<? extends ParentClass>
的類型是List。
在你的例子中,只需要用「Class」而不是「List」來代替。 myClass
是一個類,即你可以用類似「MyClassName.class」的方法調用該方法。此外,我的類的參數是一個ParentClass。這基本上意味着您只能將該類的ParentClass或其子類傳遞給該方法。
另請參閱:http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html
您想詳細說明嗎? –
你的意思是你不理解通配符「?」 –