我是Long类型的List,并希望将其转换为long类型的数组。
然而,当向列表添加元素时,它表示无法找到方法" add(int)"
我的代码如下所示
package collections;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
public class ListToArray {
private static List<Long> list;
public static void main(String[] args){
list=new ArrayList<Long>();
list.add(121145788);
list.add(1245898);
long[] arr=new long[list.size()];
arr=list.toArray();
}
}
我得到的错误是
错误(16,13):无法找到方法add(int)。 错误(21,25):不兼容的类型
有人可以指出它出错的地方。
答案 0 :(得分:4)
根据评论中的建议,您应添加L
以强制该值为long
:
list.add(121145788L);
list.add(1245898L);
说明:
您要添加的值为int
,而list
用于long
。添加L
会使编译器明确地将数字文字用作 L
ong
类型的值,并且可以将其添加到列表中。
如果没有它,这些数字将被视为Integers
,并且这些数字无法添加到Long
类型的列表中,因此
cannot find method add(int)
有一种方法add(long)
,这就是使用L
时使用的方法。
要转换为数组,您需要采用传统方式:
for (int i = 0; i < arr.length; i++) {
arr[i]=list.get(i);
}
这是因为long
是primitive,而Long
是引用类型(即它是Object
)。从基元到对象的转换并不总是那么容易。在这种情况下,老式的方式运作良好。
答案 1 :(得分:2)
首先,这是您的代码,但包含所有修复程序!
private static List<Long> list;
public static void main(String[] args){
list=new ArrayList<Long>();
list.add(121145788L);
list.add(1245898L);
Long[] arr = new Long[list.size()];
list.toArray(arr);
}
以下是一些解释:
Long
类型的列表。当你将add()
个项目放到列表中时 - 编译器希望它们的类型为Long
,但是你要添加文字值(普通数字,如121145788),因此将它们视为整数(类型int
并且自动装箱到Integer
而不是Long
。因此,添加L
将文字视为long
,然后将其自动装箱到Long
。很好的编译器:)list.toArray(arr);
这是将列表转换为数组的正确方法。因为您使用的方法返回的Object
和arr
数组不是Object
的数组。 arr
声明以使其为Long
类型而不是基本类型数组{{ 1}}。 如果出于某种原因需要long
,最简单的方法是:
long[]
答案 2 :(得分:1)
错误(16,13):找不到方法add(int),这是因为你在Long列表中传递int而不是Long值。你应该这样做:
list.add(121145788l);
对于第二个错误,请关注this。希望,这有帮助!
答案 3 :(得分:0)
JVM没有自动将int(short,byte,char)强制转换为Long。它在下一个链接上进行了解释。
Java: Why can't I cast int to Long
可以将List<Long>
转换为long[]
,也可以在SO上解答。
How to convert List<Integer> to int[] in Java?
答案是:
使用Java 8流
long[] arr = list.stream().mapToLong(Long::longValue).toArray();
使用Guava
long[] arr = Longs.toArray(list);
long[] arr = ArrayUtils.toPrimitive(list.toArray(new Long[0]))