Java 创建ArrayList
我已经看到一个arry列表设置如下Java 创建ArrayList,java,arraylist,Java,Arraylist,我已经看到一个arry列表设置如下 private ArrayList<Student> students; //instance variable public CollegeCommunity()//constructor { students = new ArrayList<Student>(); } ArrayList exampleArray = new ArrayList(); 我理解为什么一个有一个实例变量/构造函数,而另一个只是简单地声明
private ArrayList<Student> students; //instance variable
public CollegeCommunity()//constructor
{
students = new ArrayList<Student>();
}
ArrayList exampleArray = new ArrayList();
我理解为什么一个有一个实例变量/构造函数,而另一个只是简单地声明,但我不确定为什么第一个包含
,而另一个没有
这两者之间的区别是什么?
学生们正在使用所谓的泛型。泛型约束可以传递到ArrayList
的类型exampleArray
没有指定类型。学生使用的是所谓的泛型。泛型约束可以传递到ArrayList
的类型exampleArray
没有指定类型。区别在于称为泛型的语言功能,Java教程教程中对此进行了解释
exampleArray
是使用泛型类ArrayList
的
原始类型是没有任何类型参数的泛型类或接口的名称
原始类型没有泛型类型信息,因此与引入泛型之前类的用法相同
另一方面,学生使用泛型
泛型类型是通过类型参数化的泛型类或接口
因为它们允许编译器拥有更多的类型信息,从而通过允许编译器有效地推断类型来简化编程,这用于强制执行强类型转换和消除强制类型转换
原始ArrayList
几乎相当于ArrayList
。在有效的Java中突出显示了差异
原始类型List
和参数化类型List
之间有什么区别
松散地说,前者选择了泛型类型检查,而后者明确地告诉编译器它能够保存任何类型的对象。虽然可以将列表
传递给列表
类型的参数,但不能将其传递给列表
类型的参数。泛型有子类型规则,List
是原始类型List
的子类型,但不是参数化类型List
因此,如果使用原始类型(如List),则会丢失类型安全性,但如果使用参数化类型(如List
),则不会丢失类型安全性
区别在于被称为泛型的语言特性,这在Java教程教程中有解释
exampleArray
是使用泛型类ArrayList
的
原始类型是没有任何类型参数的泛型类或接口的名称
原始类型没有泛型类型信息,因此与引入泛型之前类的用法相同
另一方面,学生使用泛型
泛型类型是通过类型参数化的泛型类或接口
因为它们允许编译器拥有更多的类型信息,从而通过允许编译器有效地推断类型来简化编程,这用于强制执行强类型转换和消除强制类型转换
原始ArrayList
几乎相当于ArrayList
。在有效的Java中突出显示了差异
原始类型List
和参数化类型List
之间有什么区别
松散地说,前者选择了泛型类型检查,而后者明确地告诉编译器它能够保存任何类型的对象。虽然可以将列表
传递给列表
类型的参数,但不能将其传递给列表
类型的参数。泛型有子类型规则,List
是原始类型List
的子类型,但不是参数化类型List
因此,如果使用原始类型(如List),则会丢失类型安全性,但如果使用参数化类型(如List
),则不会丢失类型安全性
第一个ArrayList declatation定义了泛型类型,而exampleArray没有定义泛型类型。建议在可能的情况下使用泛型,以避免铸造的需要:
例如
第一个ArrayList declatation定义了泛型类型,而exampleArray没有定义泛型类型。建议在可能的情况下使用泛型,以避免铸造的需要:
例如
之所以在ArrayList
旁边有
,是因为您需要指定ArrayList
将保存的数据类型。在这种情况下,用户告诉java他想要一个ArrayList
,它包含classStudents
如果不这样做,它将无法工作。在ArrayList
旁边出现
的原因是您需要指定ArrayList
将保存的数据类型。在这种情况下,用户告诉java他想要一个ArrayList
,它包含classStudents
如果不这样做,它将无法工作。差异只是对编译器的一个提示。声明newarraylist()
强制在指定集合中只存储Student
类的实例。这允许Java通过泛型保持强类型安全性
在运行时,没有任何内容不会改变,因为Java有,但是这个强大的约束将帮助您:每当您尝试使用集合的时间与您用来声明它的时间不同时,编译器都会引发错误。它叫
原始声明new ArrayList()
将实例化一个列表,其中没有假定要存储在其中的对象类型:这意味着所有内容都可以
ArrayList<Student> students = ...;
Student student = students.get(0);
ArrayList exampleArray = ...;
Example example = (Example)exampleArray.get(0);