为什么我们要在 Java 中使用特定类型的列表
Why should we use a List of a particular type in Java
我目前正在学习 Java 中的课程,该课程涵盖通过静态方法传递 ArrayList
对象。在第一个静态方法中,您看到 ArrayList
只需声明为 ArrayList
,并为其命名。第一个静态方法显示数组中的所有元素。第二个静态方法更改 ArrayList
的元素。在此方法中声明 ArrayList
时,必须声明为 ArrayList<Integer>
以进行修改。为什么会这样,为什么会有所不同?感谢任何愿意阐明这一点的人。
import java.util.ArrayList;
public class Chap11Part5
{
public static void main(String[] args)
{
ArrayList<Integer> numbers = new ArrayList<Integer>();
//For-Loop to create elements for the ArrayList
for (int i = 1; i < 11; ++i)
numbers.add(i);
display(numbers); //Display Elements
change(numbers, 5); //Change Elements (See "change" method)
display(numbers); //Display New Results
}
//Loop to display elements of ArrayList
static void display(ArrayList arr) {
for(int i = 0; i < arr.size(); ++i)
System.out.print(arr.get(i) + " ");
System.out.println();
}
//Loop to change elements of ArrayList
static void change(ArrayList<Integer> arr, int amount) {
int value;
for(int i = 0; i < arr.size(); ++i) {
value = arr.get(i);
arr.set(i, value + amount);
}
}
}
<>
语法称为 generics - 它允许您限制集合包含的元素类型,并按此类型引用它们。这不是必需的,它只是更方便。
例如,您可以在不指定任何泛型的情况下编写第二个方法,但您必须自己处理转换:
static void change(ArrayList arr, int amount) {
int value;
for(int i = 0; i < arr.size(); ++i) {
value = (Integer) arr.get(i); // explicit casting here. Yuck!
arr.set(i, value + amount);
}
}
这是Java Generics API的例子。如果您声明为一个类型,该集合将只接受该类型的元素。
这解决了处理 ClassCastException 问题的问题,我们过去常常显式处理转换。
value = (Integer) arr.get(i);
为特定类型(即您提到的 ArrayList<Integer>
)制作 List
将消除运行时 ClassCastException
的风险。
我目前正在学习 Java 中的课程,该课程涵盖通过静态方法传递 ArrayList
对象。在第一个静态方法中,您看到 ArrayList
只需声明为 ArrayList
,并为其命名。第一个静态方法显示数组中的所有元素。第二个静态方法更改 ArrayList
的元素。在此方法中声明 ArrayList
时,必须声明为 ArrayList<Integer>
以进行修改。为什么会这样,为什么会有所不同?感谢任何愿意阐明这一点的人。
import java.util.ArrayList;
public class Chap11Part5
{
public static void main(String[] args)
{
ArrayList<Integer> numbers = new ArrayList<Integer>();
//For-Loop to create elements for the ArrayList
for (int i = 1; i < 11; ++i)
numbers.add(i);
display(numbers); //Display Elements
change(numbers, 5); //Change Elements (See "change" method)
display(numbers); //Display New Results
}
//Loop to display elements of ArrayList
static void display(ArrayList arr) {
for(int i = 0; i < arr.size(); ++i)
System.out.print(arr.get(i) + " ");
System.out.println();
}
//Loop to change elements of ArrayList
static void change(ArrayList<Integer> arr, int amount) {
int value;
for(int i = 0; i < arr.size(); ++i) {
value = arr.get(i);
arr.set(i, value + amount);
}
}
}
<>
语法称为 generics - 它允许您限制集合包含的元素类型,并按此类型引用它们。这不是必需的,它只是更方便。
例如,您可以在不指定任何泛型的情况下编写第二个方法,但您必须自己处理转换:
static void change(ArrayList arr, int amount) {
int value;
for(int i = 0; i < arr.size(); ++i) {
value = (Integer) arr.get(i); // explicit casting here. Yuck!
arr.set(i, value + amount);
}
}
这是Java Generics API的例子。如果您声明为一个类型,该集合将只接受该类型的元素。
这解决了处理 ClassCastException 问题的问题,我们过去常常显式处理转换。
value = (Integer) arr.get(i);
为特定类型(即您提到的 ArrayList<Integer>
)制作 List
将消除运行时 ClassCastException
的风险。