2013-06-05 42 views
-1

我正在嘗試學習泛型,並且對通配符及其使用有一些疑問。在java泛型中通配符符號有什麼區別:<?擴展對象>和<? extends T>?

通配符的上下限之間有什麼區別,特別是在java中的<? extends Object><? extends T>之間有什麼區別?

+0

這似乎有點一般。你是否先研究過仿製藥?你會知道它,如果你有 - 規範嘖嘖 - http://docs.oracle.com/javase/tutorial/java/generics/ – Coffee

+0

糾正我,如果我'錯了 - T通常用於例子,在現實生活中它應該成爲一個有意義的名字... – Coffee

+6

@Adel你錯了。 – NullUserException

回答

1

在這裏檢查您的「上限和下限」問題 - SO link

有關泛型check here

至於<? extends Object><? extends T>之間的差的概述,前者是由類型java.lang.Object結合,而後者是由類型變量T結合的類型 - 這意味着你能滿足通過在前者和後者中擴展java.lang.Object(這是所有Java類型)的任何類型,可以通過擴展T類型的任何類型來滿足。記住T可以是任何東西 - 甚至java.lang.Object。

0

<? 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是什麼的子類。這樣,你至少可以對將要退出收藏集的東西有一些想法。

+6

泛型不能在Java中使用原語工作 – NullUserException

+0

我正在糾正。我想這意味着'<?擴展Object>'畢竟是無用的,除非我缺少一些其他的微妙之處。 – Raystorm

+0

@NullUserException這就是爲什麼第二句是正確的,不是? –

相關問題