为什么lst.add(2)对于ArrayList <long>给出编译错误而不是调用add(Long)方法?

时间:2017-10-04 10:06:56

标签: java arraylist overloading

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)编译器。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用泛型时,您必须包含对列表中的对象类型的引用。在这种情况下,您试图告诉ArrayList只引用long,int或double等类型的值...

你需要使用big D Double和Big I Integer以及Big L Long来声明将在泛型中引用的对象,因为它们是对象类型。

我不太确定你是否可以选择Long作为对象类型,但检查你的API,你会看到。

希望此代码有效:

ArrayList<Long> lst = new ArrayList<Long>();