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);

我开始用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);
    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<>();