ArrayList类型不匹配

时间:2015-06-17 22:47:27

标签: java

我做了一个小程序来说明我的问题。如果我在返回行(第12行)中将转换剥离到BigInteger,则会出现“不兼容类型”的编译错误。但是如果我进行转换,那么(11th)之前的行打印出返回值的类型是BigInteger。如果它是一个BigInteger,我为什么要演员?

public class ProbArrBig {
    public static void main (String args[]) {
    }
    private static BigInteger myFunction() {
        ArrayList myArr = new ArrayList();
        BigInteger myNumber = BigInteger.valueOf(23452439);
        myArr.add(myNumber);
        System.out.println("Type of myArr.get(0): "+myArr.get(0).getClass().getName());
        return (BigInteger) myArr.get(0); //Doesn't work without (BigInteger)
    }
}

2 个答案:

答案 0 :(得分:3)

应该使用

ArrayList<BigInteger> myArr = new ArrayList<BigInteger>()

这称为泛型,表示该列表包含BigInteger  对象,因此当从列表中检索到一个值时,表明它将属于该特定类型。

答案 1 :(得分:1)

ArrayList类旨在采用泛型类型<E>,如下所示:

ArrayList<Integer> myArr = new ArrayList<Integer>();

由于您没有为特定实例提供<E>的实际类型,您实际拥有的是

ArrayList<Object> myArr = newArrayList<Object>();

因此,myArr的返回与您的方法签名不匹配,除非您使用BigInteger,因为所有内容都是从Object类继承的。如果您更改方法以返回类型Object,您将看到代码将在没有错误的情况下编译而没有错误。