Java自动装箱和拆箱

时间:2014-08-10 19:52:45

标签: java generics

我正在尝试将int和数组转换为List,但每次尝试时都会出现编译错误。

   List<Integer> integers = toList(draw.getToto6From49().getFirstRound());

// getFirstRound() returns int[] ; 

这是我的toList方法

public class ArraysUtil {


 public static <T> List<T> toList(T[] ts) {
  List<T> ts1 = new ArrayList<>();
  Collections.addAll(ts1, ts);
  return ts1;
 }
}

java:com.totoplay.util.ArraysUtil类中的方法toList不能应用于给定的类型;

  required: T[]
  found: int[]
  reason: inferred type does not conform to declared bound(s)
    inferred: int
    bound(s): java.lang.Object

3 个答案:

答案 0 :(得分:5)

是的,基本上你不能这样做。您期望能够使用类型参数toList调用int,并且Java不允许将基元用作类型参数。对于你想要处理的每个原语,你基本上需要一个不同的方法,例如。

public static List<Integer> toList(int[] ts) {
  List<Integer> list = new ArrayList<>(ts.length);
  for (int i in ts) {
    list.add(i);
  }
}

至少,Java 7及之前就是这种情况。在Java 8中,它稍微简单一些:

int[] array = { 1, 2, 3 };
IntStream stream = Arrays.stream(array);
List<Integer> list = stream.boxed().collect(Collectors.toList());

答案 1 :(得分:0)

因为原始类型不适合使用泛型。所有泛型都需要作为对象来处理,而原语不可能。 More Detail

答案 2 :(得分:0)

在Java 8中,您可以这样做:

List<Integer> list = new ArrayList<>();
list.add(101); // autoboxing will work
int aValue = list.get(0); // autounboxing will work, too
  

在尖括号(&lt; Integer&gt;)中指定整数类型   创建List对象,告诉编译器List将保持   只有Integer类型的对象。这使编译器可以自由包装   在使用List时解压缩原始int值   对象

     

从书中开始:Java 8基础知识