2016-01-24 74 views
0

爲什麼java不會允許這種超越? 有什麼,我失蹤?使用集合時超越的規則

class Abc 
{ 
    public void add (List<String> li) 
    { 

    } 

} 
public class Test extends Abc { 
    public static void main(String args[]) 
    { 

    } 

    @Override 
    public void add (List<Object> li) 
    { 

    } 

雖然它允許方法重寫,如果我刪除

<Object> 

,只是寫這實際上是一樣的

List<Object> 

另外,在騎行方法列表L要添加,如果列表中的重疊方法和重疊方法具有相同的類型,則允許重載。

List<String> - over-ridden method 
List<String> - over-riding method 
+0

因爲列表不是列表。而且因爲使用原始類型告訴編譯器:就像泛型類型不存在一樣。 http://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas-generics-implicitly-p,http://stackoverflow.com/questions/2770321/what-是原始類型和爲什麼應該我們使用它 –

+0

你正在重寫使用泛型。 –

+0

@JBNizet:你能詳細闡述一下:「使用原始類型告訴編譯器:就像泛型類型不存在一樣。」 – Genius

回答

1

這是Generics在Java中設計的一個限制(設計缺陷?bug?)。

您的期望是合理的,但他們決定實施(和定義)泛型的方式使其不可行。

但是,如果你仔細想想,他們的設計可能比你的預期更合理的:在實際應用中,一個List<String>可能不能直接轉換爲List<Object> - 這是有可能創造一個全新的List,在複製內容。