java - 在构造函数中设置set的内容

标签 java set

我有一个动物类...

public abstract class Animal {
    private AnimalType type;
    private String noun;
    private String scientificNoun;
    private short minSizeCm;
    private short maxSizeCm;
    private double minWeightGrams;
    private double maxWeightGrams;
    private Set<AnimalColour> animalColour = new HashSet<>();
    private Set<AnimalLocomotion> locomotion = new HashSet<>();
    private Set<AnimalCountry> country = new HashSet<>();
    private Set<AnimalNaturalHabitat> naturalHabitat = new HashSet<>();

    public Animal(AnimalType type, String noun, String scientificNoun, short minSizeCm, short maxSizeCm,
                  double minWeightGrams, double maxWeightGrams, Set<AnimalColour> animalColour,
                  Set<AnimalLocomotion> locomotion, Set<AnimalCountry> country,
                  Set<AnimalNaturalHabitat> naturalHabitat) {
        this.type = type;
        this.noun = noun;
        this.scientificNoun = scientificNoun;
        this.minSizeCm = minSizeCm;
        this.maxSizeCm = maxSizeCm;
        this.minWeightGrams = minWeightGrams;
        this.maxWeightGrams = maxWeightGrams;
        this.animalColour = animalColour;
        this.locomotion = locomotion;
        this.country = country;
        this.naturalHabitat = naturalHabitat;
    }
}

我还有 Bird 类(class)...

public abstract class Bird extends Animal {
    private BirdBeakShape beakShape;
    private Set<AnimalColour> featherColour;
    private short minWingspanLengthCm;
    private short maxWingspanLengthCm;

    public Bird(String noun, String scientificNoun, short minSizeCm, short maxSizeCm,
                double minWeightGrams, double maxWeightGrams, Set<AnimalColour> animalColour,
                Set<AnimalLocomotion> locomotion, Set<AnimalCountry> country,
                Set<AnimalNaturalHabitat> naturalHabitat, BirdBeakShape beakShape, Set<AnimalColour> featherColour,
                short minWingspanLengthCm, short maxWingspanLengthCm) {
        super(AnimalType.BIRD, noun, scientificNoun, minSizeCm, maxSizeCm, minWeightGrams, maxWeightGrams, animalColour,
                locomotion, country, naturalHabitat);
        this.beakShape = beakShape;
        this.featherColour = featherColour;
        this.minWingspanLengthCm = minWingspanLengthCm;
        this.maxWingspanLengthCm = maxWingspanLengthCm;
    }
}

还有一个 Buzzard 类...

import java.util.Set;

public class Buzzard extends Bird {
    public Buzzard(String noun, String scientificNoun, short minSizeCm, short maxSizeCm,
                   double minWeightGrams, double maxWeightGrams, Set<AnimalColour> animalColour,
                   Set<AnimalLocomotion> locomotion, Set<AnimalCountry> country,
                   Set<AnimalNaturalHabitat> naturalHabitat, BirdBeakShape beakShape, Set<AnimalColour> featherColour,
                   short minWingspanLengthCm, short maxWingspanLengthCm) {
        super("Buzzard", "Buteo buteo", (short) 51, (short) 57, 550, 1300,
                AnimalColour.BROWN);
    }
}

我试图在构造函数中设置 Buzzard 的不同颜色。比如棕色、黑色、灰色。颜色枚举是...

public enum AnimalColour {
    BROWN,
    BLACK,
    WHITE,
    GREY,
    GREY_BROWN,
    BLACK_STREAKS,
    GREEN,
    CREAM
}

但是,我不知道如何将枚举中的各种颜色设置为构造函数中的集合(或任何更好的方法,值得赞赏)。此外,还有很多重复。有什么办法可以减少这种情况吗?因为我最终也会有哺乳动物和爬行动物类,所以即使现在仍有太多代码重复

最佳答案

Buzzard 首先不应该是一个类。它应该是 Bird 的实例。您为其提供的字段值过于具体,无法成为一个类(除非 Buzzard 的某些部分您未在此处显示)。

您应该删除 Buzzard 类并创建一个名为 buzzardBird 实例:

Bird buzzard = new Bird("Buzzard", 
                        "Buteo buteo", 
                        (short) 51, 
                        (short) 57, 
                        550, 
                        1300,
                        EnumSet.of(AnimalColour.BROWN)
                        ... // pass in other parameters
                        );

您还可以考虑使用 builder pattern .

关于java - 在构造函数中设置set的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54958053/

相关文章:

python - 如何通过索引访问集合元素?

android - 如何在文本转语音中使用印地语(印度母语)?

java - 如何解决 MalformedJsonException : Unterminated object that exist even after setting JsonReader to lenient

java - j2me 使用列表

java - 未知原因 struts 项目无法正常工作?

java - Android——为一个连接打开多个套接字(输入和输出流)

java - 阻止 GSON 序列化 JSON 字符串

algorithm - 如何找到多重集的所有分区(允许重复的集合)

java - 集合表示法的特定 Java 正则表达式

python - 多集交集运算的平均复杂度及其底层实现