![](/img/trans.png)
[英]Java generics: why someObject.getClass() doesn't return Class<? extends T>?
[英]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.