我有一个名为Food
的课程。
食物内部是枚举FoodType
,因此:
public class Food {
public enum FoodType {
STRAWBERRY, COOKIE, CHILLI, APPLE, BURGER, HOTDOG, PIZZA, LEMON
}
FoodType foodType;
...
}
在我的食物构造函数中,我有这个:
public Food(Vector2 position) {
...
this.foodType=generateFoodType();
}
generateFoodType
将从我的枚举中随机返回其中一个值。
我遇到的问题是食物的某些其他特性将取决于其食物类型(例如大小)。这迫使我在设置其属性之前不断检查食物类型是什么,我发现自己不断编写switch语句,只是让事情变得一团糟。
我考虑过创建Food
的子类而不是使用枚举,但我想知道是否有人可以看到另一种方式,因为如果我这样做,我可能最终会得到很多类。
答案 0 :(得分:1)
只需将属性添加到enum
值即可。这个问题包含了很多方法:Conveniently map between enum and int / String
您甚至可以向枚举和override them for each value添加方法。
答案 1 :(得分:1)
赋予enum
更多权力:它可以拥有您想要的任何属性和方法,每个成员甚至可以在需要时覆盖它们。这是size
的简单示例:
public enum FoodType {
STRAWBERRY(2), COOKIE(4), CHILLI(1), APPLE(8),
BURGER(12), HOTDOG(11), PIZZA(18), LEMON(3);
public final int size;
private FoodType(int size) { this.size = size; }
}
答案 2 :(得分:0)
制作一个可以封装一个开关的方法。 之后,每次要使用switch语句时都会调用此方法。 您将设置方法的参数作为要比较的值。
public Object doCHeck(String comparableValue) {
//do the check
return object; //return a boolean or whatever you want
}
我认为这是解决问题的更好,更清洁的解决方案。
答案 3 :(得分:0)
我不会硬编码数据。如果您想要一个干净的实现,您的代码不应该知道食物的具体细节。将其外包到文本文件中:
Name="Strawberry",
Color="Red",
Size=10
在使用Java时,请查找JSON或XML库。这样你就有一个Food类从文本文件中获取数据,只是实现了使用这些不同统计数据的逻辑。
奖励:任何非程序员都可以更改统计数据甚至添加新食物!