2013-06-11 35 views
4

爲什麼我不能在同一個類中同時使用這兩種方法?ArrayList數據類型的Java重載

public double foo(ArrayList<Integer> x); 
public double foo(ArrayList<Double> d); 
+1

http://stackoverflow.com/questions/2241514/overloading-java-function-with-list-parameter – PrR3

回答

4

當Java實現的仿製藥,使字節碼向後兼容,他們想出了類型擦除。這意味着在運行時,通用信息不見了。所以,簽名是真的:

public double foo(ArrayList x); 
public double foo(ArrayList d); 

,你有兩種方法具有相同的簽名。

這裏的解決方案不會超載方法名稱;給兩個方法命名不同的名字。

這是Java Generics Tutorial Page on type erasure

+0

還有其他解決方案。 http://stackoverflow.com/a/2241584/691859但是,謝謝在類型擦除的澄清。 – 2rs2ts

-2

你爲什麼不嘗試將其更改爲:

public double fooInteger(ArrayList<Integer> x); 
public double fooDouble(ArrayList<Double> d); 

我和我的小應用程序類似的問題,直到我改變了第二陣的名稱。

+0

這完全破壞了重載的目的。 – 2rs2ts

+0

如果OP試圖重載一個方法,即多次使用方法名稱,那麼解決方案顯然不會放棄並使用新的方法名稱。 – 2rs2ts

1

你的問題是兩種方法都有相同的方法簽名。要重載方法,它們必須具有相同的名稱和返回類型,但方法簽名不同,在這種情況下,兩種方法都會接受一個數組列表。