ArrayList中有两个重写方法:
public boolean add(E e)
public void add(int index,E element)
一般规则是什么,根据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)编译器。
答案 0 :(得分:0)
因为您尝试添加integer
。如果您指示编译器将其视为long
添加L
或l
到数字
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
答案 1 :(得分:0)
使用泛型时,您必须包含对列表中的对象类型的引用。在这种情况下,您试图告诉ArrayList只引用long,int或double等类型的值...
你需要使用big D Double和Big I Integer以及Big L Long来声明将在泛型中引用的对象,因为它们是对象类型。
我不太确定你是否可以选择Long作为对象类型,但检查你的API,你会看到。
希望此代码有效:
ArrayList<Long> lst = new ArrayList<Long>();