This question already has answers here:
What is a raw type and why shouldn't we use it?
                                
                                    (15个答案)
                                
                        
                3年前关闭。
            
        

我有一个程序,它创建几个对象并将每个对象添加到ArrayList中,然后应该遍历ArrayList中的每个对象,并使用项目中另一个类的getter来显示有关每个对象的信息。我无法在我的foreach循环中获取对象以使用其他类中的任何方法。这是我的主要内容,包括底部的故障循环:

import java.util.ArrayList;

public class ITECCourseManager {

    public static void main(String[] args) {

        ArrayList ITECCourse = new ArrayList();

        ITECCourse infotech = new ITECCourse("Info Tech Concepts", 1100, 5, "T3050");
        infotech.addStudent("Max");
        infotech.addStudent("Nancy");
        infotech.addStudent("Orson");
        ITECCourse.add(infotech);

        ITECCourse java = new ITECCourse("Java Programming", 2545, 3, "T3010");
        java.addStudent("Alyssa");
        java.addStudent("Hillary");
        ITECCourse.add(java);

        for (Object course : ITECCourse) {
            System.out.println("Name: " + course.getName());
        }
    }
}


这是我项目中另一个需要使用的方法的类:

public class ITECCourse {

    public String name;
    public int code;
    public ArrayList<String> students;
    public int maxStudents;
    public String room;

    ITECCourse(String courseName, int courseCode, int courseMaxStudents, String roomNum) {

        name = courseName;
        code = courseCode;
        maxStudents = courseMaxStudents;
        students = new ArrayList<String>();
        room = roomNum;
    }

    public String getName() {
        return name;
    }


如果我将java.getName()替换为course.getName(),则该代码有效。当我能够调用对象并直接在代码中的同一位置使用该方法时,为什么不能在ArrayList上使用foreach循环对每个对象使用getter,我感到困惑。

编辑:谢谢您的回答,简单的错误只需要进行两次/三个更改:在开始时声明ArrayList<ITECCourse>,将Object循环中的for更改为ITECCourse,当然也将我的arraylist从到ITECCourse,因此与我的ITECCourse类没有混淆。

最佳答案

调用course.getName()无效,因为您已在循环中将course定义为Object,并且Object没有方法getName()。如果在ArrayList声明中添加类型参数(例如ArrayList<ITECCourse>),则可以遍历ITECCourse实例列表而不是Object

附带说明一下,命名变量ITECCourse只会引起混乱,因为它与您的类相同。最好将变量命名为itecCourseList

09-30 16:57