gpt4 book ai didi

java - ArrayList inside ArrayList inside a class
转载 作者:行者123 更新时间:2023-11-30 00:16:48 27 4
gpt4 key购买 nike

我有 3 个这样的类:

public class Subject {
String name;
ArrayList<Teacher> teachers;

public Subject(String name, ArrayList<Teacher> teachers) {
init();
this.name = name;
this.teachers = teachers;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public ArrayList<Teacher> getTeachers() {
return teachers;
}

public void setTeachers(ArrayList<Teacher> teachers) {
this.teachers = teachers;
}

//
private void init() {
this.teachers = new ArrayList<>();
}
}

public class Teacher {
String name;
ArrayList<DLink> dLinks;

public Teacher(String name, ArrayList<DLink> dLinks) {
init();
this.name = name;
this.dLinks = dLinks;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public ArrayList<DLink> getdLinks() {
return dLinks;
}

public void setdLinks(ArrayList<DLink> dLinks) {
this.dLinks = dLinks;
}

//
private void init() {
this.dLinks = new ArrayList<>();
}
}

public class DLink {
String URL;

public DLink(String URL) {
this.URL = URL;
}

public String getURL() {
return URL;
}

public void setURL(String URL) {
this.URL = URL;
}
}

我正在尝试创建一些 ArrayList<Subject>但我不知道该怎么做。我试着这样做:

ArrayList<Subject> subjects = new ArrayList<>();
subjects.add(new Subject("S1", new ArrayList<Teacher>().add(new Teacher("T1", new ArrayList<DLink>().add(new DLink("D1")))));

但是我遇到了语法错误。我想知道操作 Subject 类的 objects 的正确语法以及如何添加 ArrayList<Teacher> 的多个值& ArrayList<DLink>在 Subject 类的对象的一行中。谢谢...

最佳答案

ArrayList 不是 builder .构建器是一个在方法中返回自身的类,因此您可以执行以下操作:

new SomeClass().someField().someField().build()

并在它最终返回时获取 SomeClass 的实例。

ArrayList 不是构建器。这意味着返回值不是每个方法本身。

当你这样做时:

new ArrayList<SomeClass>();

您创建一个新的 ArrayList 实例。

但是,如果您这样做:

new ArrayList<SomeClass>().add(new SomeClass());

这会创建一个新实例,然后向其中添加一些内容。 但是:

add 的返回值为boolean。不是 ArrayList。这意味着当您调用该方法时,会返回一个 boolean 值,而不是 ArrayList。当你像这样堆叠它时,它类似于做:

someINstance.getField()/*returns an instance of a class*/.someInteger/*now you grab an integer*/

为了解决这个问题,您必须单独创建 ArrayList:

ArrayList<Subject> subjects = new ArrayList<>();
List<Teacher> teachers = new ArrayList<>();
//then add to the ARrayList
List<DLink> dLinks = new ArrayList<DLink>();
dLinks.add(new DLink("D1"));
teachers.add(new Teacher("T1", dLinks);
subjects.add(new Subject("S1", teachers));

说实话,这是一种极其低效的方法,但这是当 ArrayList(或与此相关的任何 List)不是构建器时的唯一选择

TL:DR; 因为 ArrayList 不是构建器,所以当您调用 .add 时您不会获得 List 的实例,这意味着您必须拥有该实例单独地,它不能像你尝试的那样创建并立即添加值,因为该方法是一个 boolean 意味着它不返回 ArrayList 的实例


我想说的代码示例:

public static void main(String[] args){
int x = someMethod();
}

public static void someMethod(){
System.out.println("whatever");
}

与 ArrayLists 相同。第一部分为您提供了一个实例,但随后您得到一个 void 作为返回类型,这意味着您不会从最终代码中获得任何实例。


不,没有办法在一行中做到这一点,至少在 Java 8 及以下版本中不行。

关于java - ArrayList<object> inside ArrayList<anotherObject> inside a class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47114545/

27 4 0