2017-10-04 35 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>(); 
相关问题