public class MainClass {
ArrayList<Man> mans = new ArrayList<Man>();
// I'm filling in this arraylist, but I'm not writing those parts because I want to summarize the
//code.
}
public class Man {
int index_father, index_son;
String name;
public Man(String name){
this.name = name;
}
}
这个男人社区中的一些人有父子关系。我的问题是:
我正在寻找一种更简洁的方式来建立这种父子关系。
我尝试用整数建立这种关系(例如:which_father 显示该男子的父亲在“男子”列表中所在的目录)但这有一些缺点:
1-创建对象时,我总是必须在父亲之后创建儿子。因为:
private void createMan() {
Man man = new Man("Ethan");
man.index_father = 4;
mans.add(man);
mans.get(4).index_son = mans.indexOf(man);
}
如果我们还没有创造出父亲,那么人类的第四个元素就不会被创造出来。
2- 如果我从 mans arraylist 中删除一个元素,which_fathers 将不会显示正确的父亲 man。
我可能对 Java 了解不够,但一定有一种简单的方法可以在对象之间建立联系(比如本例中的父子关系),对吧?
最佳答案
您可以添加 List<Man>
在Man
中代表儿子类:
public class Man {
String name;
List<Man> sons = new ArrayList<>();
public Man(String name){
this.name = name;
}
}
编辑:
我认为 OOP 可以帮助简化事情:
public class Person {
Sex sex;
String name;
List<Person> children = new ArrayList<>();
Person partner; // husband/wife
public Person(String name, Sex sex){
this.name = name;
this.sex = sex;
}
public void marryTo(Person person){
this.partner = person;
person.setPartner(person);
}
public void setChildFromMarriage(Person child){
children.add(child);
partner.getChildren().add(child);
}
public enum Sex {
MAN, WOMAN
}
}
你可以保留一个List<Person>
.
用法:
List<Person> people = Arrays.asList(
new Person("Jordan", Person.Sex.MAN),
new Person("Tim", Person.Sex.MAN),
new Person("Sarah", Person.Sex.WOMAN)
);
// Let's marry Jordan to Sarah
Person jordan = getPersonByName(people, "Jordan");
Person sarah = getPersonByName(people, "Sarah");
jordan.marryTo(sarah);
Person child = new Person("Jordan Jr", Person.Sex.MAN);
// We can add the child to people list if we want
jordan.setChildFromMarriage(child);
// Let's change their child name using Sarah's reference.
getPersonByName(sarah.getChildren(), "Jordan Jr").setName("Bob");
System.out.println(child.getName()); // Bob
private static Person getPersonByName(List<Person> people, String name) {
return people.stream()
.filter(person -> person.getName().equals(name))
.findFirst()
.get();
}
输出:
Bob
关于java - 如何在对象之间建立链接/关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67742353/