Java 泛型类中出现意外的类型编译错误,可能的参数是什么?
我开始用java编写集合框架,我有一个简单的代码,但它让我好奇泛型类可能的参数Java 泛型类中出现意外的类型编译错误,可能的参数是什么?,java,generics,Java,Generics,我开始用java编写集合框架,我有一个简单的代码,但它让我好奇泛型类可能的参数 import java.util.ArrayList; import java.util.LinkedList; class ListExa{ public static void main(String[] args){ ArrayList<int> names = new ArrayList<int>(); names.add(1); names.add(2);
import java.util.ArrayList;
import java.util.LinkedList;
class ListExa{
public static void main(String[] args){
ArrayList<int> names = new ArrayList<int>();
names.add(1);
names.add(2);
names.add(3);
names.add(4);
names.add(5);
System.out.println(names);
}
}
import java.util.ArrayList;
导入java.util.LinkedList;
李斯特类{
公共静态void main(字符串[]args){
ArrayList name=新的ArrayList();
名称。添加(1);
名称。添加(2);
名称。添加(3);
名称。添加(4);
名称。添加(5);
System.out.println(名称);
}
}
ListExa.java:6:错误:意外类型
ArrayList name=新的ArrayList();
必填项:参考
找到:int
您需要使用类Integer
而不是基元类型int
:
由于
jdk1.7
可以使用diamond
操作符
避免代码重复:
ArrayList<String> names = new ArrayList<>();
^^
ArrayList name=new ArrayList();
^^
集合仅支持对象,请使用整数而不是整数
作为最佳实践,我们不应该这样编写arraylistnames=newarraylist()代码>
意味着总是给超级参考,所以它应该是这样的
List<Integer> names = new ArrayList<Integer>();
List name=new ArrayList();
您应该为整数而不是基元类型使用包装类:
ArrayList<Integer> names = new ArrayList<Integer>();
ArrayList name=new ArrayList();
有关更多详细信息,请查看此处:
这不是一个全新的答案,更多的是对已经说过的话的总结
在Java Collections框架中,作为类型参数(尖括号中),您可以指定要在集合中存储的对象类型(列表
,集
,…)
根据语言设计,不能使用诸如int
、long
、double
等基本类型。在这些基本类型中,只能使用引用类型。因此,如果要在ArrayList
中存储整数,必须执行ArrayList
而不是ArrayList
但在代码的后面,您希望将字符串添加到列表中。为此,您的列表应该声明为ArrayList
。当尝试添加任何不是整数的内容时,ArrayList
将给出编译错误
当然,您可以声明ArrayList
。它将接受所有类型的对象(String
,Integer
,Person
,File
,…),但这与泛型背后的思想背道而驰:尽可能明确地告诉编译器您希望在列表中允许什么类型的对象(并禁止其他对象),避免奇怪的运行时错误
这是一种很好的方式
List<String> names = new ArrayList<>();
List name=new ArrayList();
或
Collection name=new ArrayList();
如果以后确定LinkedList
或HashSet
是更适合程序需要的数据结构,则只需更改声明的右侧即可
ArrayList<int> names = new ArrayList<int>();
所以正确的方法是:
ArrayList<Integer> names = new ArrayList<>();
ArrayList name=new ArrayList();
你想ArrayList
有Integer
s还是String
s?我知道了,只是把这段代码编辑成Integer
s实际上我没有问为什么会出错?问泛型类可能有哪些参数??我正在编辑所有在后期编辑后可能会出错的答案。他的第一行本身就错了,所以我纠正了这一点,显然,如果他添加了字符串,那么应该是List names=new ArrayList();
ArrayList<int> names = new ArrayList<int>();
int -> Integer and so on.
ArrayList<Integer> names = new ArrayList<>();