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