我正在嘗試學習泛型,並且對通配符及其使用有一些疑問。在java泛型中通配符符號有什麼區別:<?擴展對象>和<? extends T>?
通配符的上下限之間有什麼區別,特別是在java中的<? extends Object>
和<? extends T>
之間有什麼區別?
我正在嘗試學習泛型,並且對通配符及其使用有一些疑問。在java泛型中通配符符號有什麼區別:<?擴展對象>和<? extends T>?
通配符的上下限之間有什麼區別,特別是在java中的<? extends Object>
和<? extends T>
之間有什麼區別?
在這裏檢查您的「上限和下限」問題 - SO link。
有關泛型check here
至於<? extends Object>
和<? extends T>
之間的差的概述,前者是由類型java.lang.Object
結合,而後者是由類型變量T
結合的類型 - 這意味着你能滿足通過在前者和後者中擴展java.lang.Object
(這是所有Java類型)的任何類型,可以通過擴展T
類型的任何類型來滿足。記住T可以是任何東西 - 甚至java.lang.Object。
<? extends Object>
是幾乎沒有沒用。這意味着你正在處理的不是原始類型的東西。 <? extends T>
表示您使用的是T
類型的對象或T
的子類,並具有任何方法和字段T
。
<? extends T>
用於聲明對象預期包含的內容。它限制了容器的範圍或者爲方法/容器增加了功能性的方法。
例如:
public class foobination<T extends foo>
{
private <? extends T> foo;
public foobination(T foo)
{
this.foo = foo;
}
public getFoo() { return foo; }
public void myFoobinator(<? extends T> foob)
{
foo.bash("foobinator was here");
foo.setBang(foob.getBang());
}
}
其他共同使用的情況將是:List<? extends T>
如果你存儲的東西集合,你不知道它到底是什麼,但你知道他們都將是無論T是什麼的子類。這樣,你至少可以對將要退出收藏集的東西有一些想法。
泛型不能在Java中使用原語工作 – NullUserException
我正在糾正。我想這意味着'<?擴展Object>'畢竟是無用的,除非我缺少一些其他的微妙之處。 – Raystorm
@NullUserException這就是爲什麼第二句是正確的,不是? –
這似乎有點一般。你是否先研究過仿製藥?你會知道它,如果你有 - 規範嘖嘖 - http://docs.oracle.com/javase/tutorial/java/generics/ – Coffee
糾正我,如果我'錯了 - T通常用於例子,在現實生活中它應該成爲一個有意義的名字... – Coffee
@Adel你錯了。 – NullUserException