我会推荐你使用简单的继承与不可变的对象。
所以,首先你必须创建抽象类:
public abstract class AbstractPerson {
private final String name;
private final Optional<String> nickname;
private final boolean speaksEnglish;
private final PersonType personType;
protected AbstractPerson(final String name, final Optional<String> nickname, final boolean speaksEnglish, final PersonType personType) {
this.name = name;
this.nickname = nickname;
this.speaksEnglish = speaksEnglish;
this.personType = personType;
}
public String getName() {
return name;
}
public Optional<String> getNickname() {
return nickname;
}
public boolean getSpeaksEnglish() {
return speaksEnglish;
}
public PersonType getPersonType() {
return personType;
}
}
随着PersonType
枚举:
public enum PersonType {
TypeOne, TypeTwo, TypeThree;
}
现在,我们有相应的构造三个选项中的子类:
public final class EnglishSpeakingPerson extends AbstractPerson {
public EnglishSpeakingPerson(final String name, final String nickname) {
super(name, Optional.of(nickname), true, PersonType.TypeOne);
}
}
public final class Person extends AbstractPerson {
public Person(final String name, final String nickname) {
super(name, Optional.of(nickname), false, PersonType.TypeTwo);
}
public Person(final String name) {
super(name, Optional.empty(), false, PersonType.TypeThree);
}
}
在这种情况下,我们的具体类是不可变的,它的类型是defi在创作的时刻。你不需要创建if-else梯形图 - 如果你想创建新的类型,只需创建新的类/构造函数。
如何在枚举中添加一个抽象方法,比方说'布尔测试(Person)',以便每个枚举类型都能够检查人是那种类型。后来你只需要遍历Enum.values()并调用test(person)。不确定是否是最好的想法,但是你会将逻辑放在一个地方e避免所有if/else –
你的Person对象是可变的还是不可变的? – ByeBye