2014-04-16 20 views
0

我在採訪中被問到這個問題。Java超載

任何人都可以解釋。

public class A{ 

    public void show(List <String>list1,List<Integer>lists2){...} 

    public void show(List <Integer>list1,List<String>lists2){...} 
} 
public class B{ 
public static void main(..){ 
    A a=new A(); 
    List<String> list1; 
    List<Integer>lists2; 
    a.show(list1,lists2); 
    } 
    } 

我說2功能會被稱爲..但是當我在它給了同名函數的錯誤neatbeans又寫道被稱爲... ??? 爲什麼這裏沒有超載這裏使用的概念?

+0

您的代碼將無法編譯。你的'show'方法都有相同的擦除。 –

回答

1

Java的泛型是在編譯時強制執行,但集合的類型被刪除,什麼你留下的是一個重複的方法。在IDE中,您會收到一些關於「相同類型擦除」的消息。

這裏有一個關於它的很好的討論,我很享受:

http://mindprod.com/jgloss/generics.html

6

由於type erasure,該方法的參數將成爲List

public void show(List list1, List list2); 
public void show(List list1, List list2); 

因此變成無效代碼。

0

首先,從類聲明(實際上是從A類)的一個去掉「公開」。

其次,編譯器讀取參數爲show(list, list),所以它是給你同樣的方法並沒有發生在這裏沒有超載。 由於這兩個參數是show(list, list)

記住,泛型被用於區分所述對象類型不返回類型。

希望它有效。