[英]Is (the type of) String.class a subtype of (the type of) Object.class?
在Java中,類對象與它們所代表的類具有相同的遺傳關系嗎?
.class
屬性始終返回Class
對象。 Class
類(怪異)有一個泛型參數。 泛型參數類型是子類。
Class<String> stringClass = String.class;
Class<Object> objectClass = Object.class;
並且因為使用泛型, Type<foo>
不是 Type<subtype_of_foo>
的超Type<subtype_of_foo>
(參見Java教程 ),這意味着答案是“否”。
Java中的Class
對象都是相同的類。
你可以告訴,因為如果你看看Javadoc,你可以看到Class
類是final
。
不,只有一個名為Class
。 String.class是Class的實例,也是Object.class。
試試這段代碼:
boolean answer = Object.class.isAssignableFrom(String.class);
System.out.println(answer); // true!
然而:
Class<Object> string = String.class; <-- compile-time error
Class<? extends Object> string = String.class; <-- it's ok
即使Y擴展X,Class也不擴展Class的原因是對於任何泛型類型G,G不擴展G
你可能想在常見問題解答中查一查。一袋蘋果不是一袋水果,即使蘋果是水果; 因為你可以添加任何水果到后者,但只有蘋果到前者。
如果我正確理解你的問題,情況並非如此。 表示java.lang.String
類的對象以及任何其他類始終是java.lang.Class
類。
請記住, java.lang.Class
被定義為final ,因此您不能將其子類化 。
所有Class對象都是Class的實例。
如果你想知道一個類的層次結構,你可以調用getSuperClass()和getInterfaces()
注意:您可能需要遞歸調用這些以獲取所有超類和接口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.