【发布时间】:2020-01-03 10:13:25
【问题描述】:
假设我有一个 Dog 类,它有很多属性,例如头发颜色、重量、长度、宽度
然后我有一个狗品种的枚举,比如DogType.MASTIFF
所以如果我要实例化一只狗,我可以拥有Dog dog = new Dog(DogType.POODLE)
我这样做是为了在方法相同的情况下不必为每种类型的狗设置单独的类,只是属性发生变化
所以在狗的构造函数中你会有
switch(DogType){
case MASTIFF:
this.weight = 5
this.height = 10
}
...
但是,这会导致 Dog 类的构造函数非常庞大且笨拙。
我要问的是有没有一种方法可以为每个枚举定义很多常量值?因此,代替那个 switch 语句,它就像在给定 DogType 的构造函数中一样,您可以使用
DogType.WEIGHT
或代码DogType.MASTIFF.WEIGHT中其他地方的特定类型
我觉得我错过了什么。在其他语言中,我只会制作一种常量字典。
【问题讨论】:
-
为什么不想为每只狗设置一个类并从超类(Dog)继承?
-
我不认为通过
switch或enum的属性硬编码体重和身高可以被认为是一个好的(和灵活的)解决方案,但我不知道你的确切的要求... -
@brinck 因为数据不应该被继承。改用合成。
-
@brinck 在这种情况下,数据并不意味着被继承。即使是这样,我也可能想要一个恒定的事实来源,以了解某种狗类型的所有属性都打算在程序的其他地方使用
-
@user3124306 好的,在这种情况下,如果将枚举与下面提到的构造函数一起使用。
标签: java data-structures enums constants