我做了一个小程序来说明我的问题。如果我在返回行(第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)
}
}
答案 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,您将看到代码将在没有错误的情况下编译而没有错误。