从ArrayLists

时间:2017-10-01 14:46:08

标签: java arraylist static

我有一个对象的arraylist,我从课堂发送#34;测试" to class" Subjects",但无法访问Subjects类中的一些方法。

我希望能够简单地发送一个"主题"的arraylist。对象(从Testing类)到Subject类中的方法,并且能够使用Subject类中的其他方法。

public class Subject {
    private String subjectName;
    private String courseCode;

//getters and setters for subjectName and courseCode

如果我只是从Subject类调用它,而不是从Testing类调用它,我可以访问以下方法。

public String getDiscipline(){
    int a = courseCode.length()-3;
    String discipline = courseCode.substring(0, a);        
    return discipline;
}

在下面的方法中,我可以返回并打印对象并调用我想要的方法,但只能用于一个对象......

 public List<?> allDisciplines(ArrayList<?> inputSubjects){

    for (int i = 0; i<inputSubjects.size(); i++){
    System.out.println(inputSubjects.get(i)); //this returns all the 

//objects, but why won't this work instead?: inputSubjects.get(i).getDiscipline(); 

    }

    //initialise new arraylist
    List<String> dis = new ArrayList<>();

    dis.add(getDiscipline()); //This works, but only for whatever single 
                              //object I used to call the allDisciplines 
                              //method with 
                              //

    return dis;
}

在另一个类中,我传递了对象数组&#34; subject&#34;进入Subject类的allDisciplines方法。

public class Testing {
    public static void main(String[] args) {
    // TODO code application logic here
    Testing program = new Testing();
    program.start();
    }

    public void start(){
    //gets the data from a file, converts it into "Subject" objects with 
    //subjectName and courseCode

以下是有效的,因为它只发送一个对象,我只得到一个结果。

    subjects.get(3).allDisciplines(subjects); 

但是,如果我尝试从Testing类访问allDisciplines方法,我不能因为它不是静态的,如果我使该类静态,它需要私有int是静态的,然后don& #39; t在我的循环迭代之间进行更改,最终得到相同的字段值。

allDisciplines(subjects); //does not work - can't see the allDisciplines 
                          //method

我不确定问题是否是因为我无法访问其类之外的方法,或者因为我没有正确引用arraylist中的对象。

感谢你能给我的任何帮助 - 我很困惑!

1 个答案:

答案 0 :(得分:0)

我认为问题是allDisciplines方法。它应该是静态的。你似乎不太了解泛型。我为你重新写了一遍:

public static List<String> allDisciplines(ArrayList<Subject> inputSubjects){


    //initialise new arraylist
    List<String> dis = new ArrayList<>();

    for (Subject subject : inputSubjects) {
        dis.add(subject.getDiscipline());
    }
    return dis;
}

我循环浏览传入的主题,并将每个主题的规则添加到新的数组列表中并返回它。我还将List<?>更改为List<Subject>,因为我们希望客户端代码能够传递一系列主题。

实现此目的的另一种更短的方法:

public static List<String> allDisciplines(ArrayList<Subject> inputSubjects){
    return inputSubjects.stream().map(Subject::getDiscipline).collect(Collectors.toList());
}

现在您可以通过

致电allDisciplines
Subject.allDisplines(subjects)
Testing中的