-3

为什么在我的类 ArrayListTest 中的代码末尾出现两个方法标头的编译时错误?

ArrayListTest: http: //pastebin.com/dUHn9vPr

学生: http: //pastebin.com/3Vz1Aytr

我在这两行有一个编译器错误:

delete(CS242, s3)

replace(CS242, s, s4);

当我尝试运行代码时,它指出:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    The method replace(ArrayList<Student>, Student, Student)in the type ArrayListTest is not applicable for the arguments (List<Student>, Student, Student)
    The method delete(ArrayList<Student>, Student) in the type ArrayListTest is not applicable for the arguments (List<Student>, Student)
        at ArrayListTest.main(ArrayListTest.java:54)

我修复了编译时错误,因为我使用 Eclipse 并且 Eclipse 提供了可用于修复编译时错误的代码选项。我选择“将方法更改为 'replace(ArrayList, Student, Student)' 为 'replace(List, Student, Student)'

虽然它修复了编译时错误,但我不明白为什么我一开始就收到编译时错误以及为什么有效地修复了错误

我真的不知道我需要编写哪些缺失代码来纠正以下这两种方法:

public static void replace(List<Student> cS242, Student oldItem,
                Student newItem) {

public static void delete(List<Student> cS242, Student target){
4

4 回答 4

2

那是因为您将您的声明ArrayList<Student>为:

List<Student> CS242 = new ArrayList<Student>(25);

你的replace方法是:

public static void replace(ArrayList<Student> aList, Student oldItem, Student newItem) {
}

对于 Java,您将 a 传递List给仅适用于ArrayLists 的方法。如果它允许您这样做,例如,您可以将实现更改为 a LinkedList<Student>,但仍将其传递给replace不正确的。

要么使用replace(List<Student>),要么声明CS242ArrayList<Student> CS242,尽管前者被认为是最佳实践。

于 2012-09-22T00:24:42.433 回答
0

在粘贴的代码中,这两个方法replacedelete没有更改为List<Student>. 这就是导致编译错误的原因。

它们首先存在,因为在第 9 行中,您正在创建一个 ArrayList 并将其保存在 List 变量中。这很好用,因为 ArrayList 实现了 List,所以每个 ArrayList 也是一个 List。稍后,您尝试使用所述列表调用需要 ArrayList 作为参数的函数。虽然这个特定的 List 也是一个 ArrayList(因为您使用了 ArrayList 构造函数),但并非所有 List 都如此。因此,您必须首先明确地强制转换或将其保存为 ArrayList。

于 2012-09-22T00:23:59.830 回答
0

该方法public static void replace(ArrayList<Student> aList, Student oldItem, Student newItem) 不允许List<Student>传入列表类型。

换句话说,第一个参数必须是一个ArrayList(或子类)。当您将签名更改为 时public static void replace(List<Student> aList, Student oldItem, Student newItem),类型的参数与预期的参数CS242类型匹配。List<Student>

于 2012-09-22T00:24:27.927 回答
0

对于您缺少的两种方法,方法List.indexOf()和方法List.remove()在这里将是无价的。

于 2012-09-22T01:29:24.063 回答