Java ArrayList类型不匹配

Java ArrayList类型不匹配,java,Java,我做了一个小程序来说明我的问题。如果我在返回的第12行(第12行)中将强制转换剥离为BigInteger,则会出现编译错误“不兼容类型”。但如果我进行转换,则(11)之前的行打印出返回值的类型是BigInteger。如果它是一个大整数,为什么我要强制转换 public class ProbArrBig { public static void main (String args[]) { } private static BigInteger myFunction() {

我做了一个小程序来说明我的问题。如果我在返回的第12行(第12行)中将强制转换剥离为BigInteger,则会出现编译错误“不兼容类型”。但如果我进行转换,则(11)之前的行打印出返回值的类型是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)
    }
}
它应该使用

ArrayList<BigInteger> myArr = new ArrayList<BigInteger>()
ArrayList myArr=new ArrayList()
这称为泛型,表示列表中包含BigInteger 对象,因此当从列表中检索某个值时,表示该值将属于该特定类型。

它应该使用

ArrayList<BigInteger> myArr = new ArrayList<BigInteger>()
ArrayList myArr=new ArrayList()
这称为泛型,表示列表中包含BigInteger
对象,因此,当从列表中检索某个值时,表示该值将属于该特定类型。

ArrayList类设计为采用泛型类型
,如下所示:

ArrayList<Integer> myArr = new ArrayList<Integer>();
ArrayList myArr=new ArrayList();
由于您没有为特定实例提供
的实际类型,因此您实际拥有的是

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

因此,除非您强制转换BigInteger,否则您返回的myArr与您的方法签名不匹配,您可以这样做,因为所有内容都继承自对象类。如果更改方法以返回类型对象,您将看到代码将编译时不会出错,不会执行强制转换。

ArrayList类设计为采用泛型类型
,如下所示:

ArrayList<Integer> myArr = new ArrayList<Integer>();
ArrayList myArr=new ArrayList();
由于您没有为特定实例提供
的实际类型,因此您实际拥有的是

ArrayList<Object> myArr = newArrayList<Object>();
ArrayList myArr=newArrayList();
因此,除非您强制转换BigInteger,否则您返回的myArr与您的方法签名不匹配,您可以这样做,因为所有内容都继承自对象类。如果更改方法以返回类型对象,您将看到代码将无错误地编译,而不执行强制转换。

List myArr=new ArrayList()注意
myArr.add(“这是一个字符串!”)
会编译,因为您使用的是原始类型。它将在
返回
时使用
ClassCastException
列出myArr=newarraylist()注意
myArr.add(“这是一个字符串!”)
会编译,因为您使用的是原始类型。它将在
返回
时使用
ClassCastException