我有一个对象的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中的对象。
感谢你能给我的任何帮助 - 我很困惑!
答案 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
中的。