2017-10-04 100 views
0

有在ArrayList的2點覆蓋的方法:爲什麼lst.add(2)爲ArrayList <Long>給出編譯錯誤而不是調用add(Long)方法?

公共布爾添加(E E)

公共無效加載(INT指數,E元件)

哪些一般規則,根據add(longArg)無法打包並致電add(E e),給我編譯錯誤(因此實際上禁止我從溢出呼叫到add(E e)

ArrayList<Long> lst = new ArrayList<>();    
    lst.add(2); // c.ERR, see below 
     // method add(int, Long) in the type ArrayList<Long> 
     // is not applicable for the arguments (int) 

P.S. Eclipse(SE7)編譯器。

+3

因爲它需要擴大和autoboxed增加,但它不會自動一舉兩得。 –

+0

eclipse不是編譯器 –

+0

eclipse擁有自己的Java編譯器實現,提供不同的錯誤信息,允許錯誤後繼續編譯.... –

回答

0

因爲您正在嘗試添加integer。如果您指示編譯器把它看作是一個long添加Ll

ArrayList<Long> lst = new ArrayList<>();    
lst.add(2L); // now it can be autoboxed 

執行的Java中9的JShell數量:

jshell> ArrayList<Long> lst = new ArrayList<>();    
lst ==> [] 

jshell> lst.add(2); 
| Error: 
| no suitable method found for add(int) 
|  method java.util.Collection.add(java.lang.Long) is not applicable 
|  (argument mismatch; int cannot be converted to java.lang.Long) 
|  method java.util.List.add(java.lang.Long) is not applicable 
|  (argument mismatch; int cannot be converted to java.lang.Long) 
|  method java.util.AbstractCollection.add(java.lang.Long) is not applicable 
|  (argument mismatch; int cannot be converted to java.lang.Long) 
|  method java.util.AbstractList.add(java.lang.Long) is not applicable 
|  (argument mismatch; int cannot be converted to java.lang.Long) 
|  method java.util.ArrayList.add(java.lang.Long) is not applicable 
|  (argument mismatch; int cannot be converted to java.lang.Long) 
| lst.add(2); 
| ^-----^ 

jshell> lst.add(2l); 
$2 ==> true 
0

當您使用泛型,你將不得不包括參考列表中正在進行的對象的類型。在這種情況下,您試圖告訴ArrayList僅引用long或int或double等類型的值...

您需要聲明將在泛型中引用的對象,方法是使用big D Double和Big I Integer和Big L Long,因爲它們是對象類型。

我不太確定你是否可以將Long作爲對象類型,但檢查你的API並且你會看到。

希望此代碼的工作:

ArrayList<Long> lst = new ArrayList<Long>(); 
相關問題