我會推薦你使用簡單的繼承與不可變的對象。
所以,首先你必須創建抽象類:
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