Java 为什么<;整数>;ArrayList是否添加字符串变量并成功编译?
对于整型Arraylist为什么能够向其中添加字符串,我感到非常困惑。如下所示,addtolist(list list)方法中的列表中添加了“(“0067”)”,由于它是一个字符串,代码应该抛出一个错误,但不会。有人能解释为什么这段代码能成功运行吗Java 为什么<;整数>;ArrayList是否添加字符串变量并成功编译?,java,arraylist,Java,Arraylist,对于整型Arraylist为什么能够向其中添加字符串,我感到非常困惑。如下所示,addtolist(list list)方法中的列表中添加了“(“0067”)”,由于它是一个字符串,代码应该抛出一个错误,但不会。有人能解释为什么这段代码能成功运行吗 //test program import java.util.ArrayList; import java.util.List; public class listing { public static void main(Str
//test program
import java.util.ArrayList;
import java.util.List;
public class listing {
public static void main(String[] args) {
List<Integer> lst = new ArrayList<Integer>();
addToList(lst);
System.out.println(lst.get(0));
}
public static void addToList(List list) {
list.add("0067");
}
}
//测试程序
导入java.util.ArrayList;
导入java.util.List;
公共类列表{
公共静态void main(字符串[]args){
List lst=new ArrayList();
地址列表(lst);
System.out.println(lst.get(0));
}
公共静态无效添加列表(列表){
列表。添加(“0067”);
}
}
查看方法签名:
public static void addToList(List list)
列表
是一个列表,启用警告应该会向您发出如下警告:
列表是原始类型。对泛型类型列表的引用应参数化
要在编译时进行更强的类型检查,需要将其更改为:
public static void addToList(List<Integer> list)
publicstaticvoidaddtolist(列表)
查看方法签名:
public static void addToList(List list)
列表
是一个列表,启用警告应该会向您发出如下警告:
列表是原始类型。对泛型类型列表的引用应参数化
要在编译时进行更强的类型检查,需要将其更改为:
public static void addToList(List<Integer> list)
publicstaticvoidaddtolist(列表)
在addToList()
中列表的参数类型不是泛型的。这意味着在该方法中,您可以向该列表添加任何对象,而不会产生编译器错误,因为只检查参数的泛型类型,而不检查传递的列表的泛型类型
现在,为什么这段代码在运行时也可以工作?编译时,泛型类型信息被擦除。因此,基本上每个列表在运行时都是一个列表。如果您在记住这一点的同时再次查看代码,您将看到它是有效的。也因为有
如果您添加
Integer foo = lst.get(0);
addToList()
中列表的参数类型不是泛型。这意味着在该方法中,您可以向该列表添加任何对象,而不会产生编译器错误,因为只检查参数的泛型类型,而不检查传递的列表的泛型类型
现在,为什么这段代码在运行时也可以工作?编译时,泛型类型信息被擦除。因此,基本上每个列表在运行时都是一个列表。如果您在记住这一点的同时再次查看代码,您将看到它是有效的。也因为有
如果您添加
Integer foo = lst.get(0);
在代码中
public static void addToList(List list)
您不会收到编译器警告,因为参数列表不是泛型的。这意味着它相当于列表
。在第一次尝试将元素插入列表时,运行时会出现错误
换成
public static void addToList(List<Integer> list)
publicstaticvoidaddtolist(列表)
您将在代码中得到编译时错误。
public static void addToList(List list)
您不会收到编译器警告,因为参数列表不是泛型的。这意味着它相当于列表
。在第一次尝试将元素插入列表时,运行时会出现错误
换成
public static void addToList(List<Integer> list)
publicstaticvoidaddtolist(列表)
您将得到一个编译时错误。发表评论。不要编辑问题。但是,这将生成一个编译器,警告问题是您的addToList()
方法。您有addToList(列表)
,您应该有addToList(列表)
。您没有在方法中指定类型。请发表评论。不要编辑问题。但是,这将生成一个编译器,警告问题是您的addToList()
方法。您有addToList(列表)
,您应该有addToList(列表)
。您没有在方法中指定类型。