簡體   English   中英

為什么getClass返回一個Class <?延伸| X |>?

[英]Why does getClass return a Class<? extends |X|>?

我試着理解getClass方法返回Class<? extends |X|>的原因是什么Class<? extends |X|> Class<? extends |X|>

openjdk附近public final native Class<?> getClass();

實際的結果類型是Class<? extends |X|> Class<? extends |X|> where |X| 是調用getClass的表達式的靜態類型的擦除。

為什么getClass不能具有相同的類型,例如XClass.class ,例如:

class Foo {}
Foo fooInstance = new Foo();
Class<Foo> fc = Foo.class; // Works!
Class<Foo> fc2 = fooInstance.getClass(); // Type mismatch ;(
Class<?> fc3 = fooInstance.getClass(); // Works!
Class<? extends Foo> fc4 = fooInstance.getClass(); // Works!
Foo foo = new SubFoo();

你期望foo.getClass()返回什么? (它將返回SubFoo.class 。)

這是整點的一部分: getClass()返回真實對象的類,而不是引用類型。 否則,您可以只編寫引用類型,並且foo.getClass()永遠不會與Foo.class有任何不同,所以你只需編寫第二個。

(順便說一句, getClass()實際上在類型系統中有自己的特殊處理,而不像任何其他方法,因為SubFoo.getClass()不返回Foo.getClass()的子類型。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM