我正在尝试找到一种好方法来组织一组仅用于不可变数据的常量值。
这是我目前正在尝试的:
public class FishType {
//PredatorFishType extends FishType
public static final PredatorFishType SHARK = new PredatorFishType(5, 20, "Shark");
public static final FishType CAT_FISH = new FishType("Cat Fish");
private String name;
private FishType(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
我也使用反射将最终值收集到集合中。我曾经使用枚举,但当不同类型的鱼(例如包含食物等其他数据的捕食者)发挥作用时,我被迫考虑一种新的方法来做到这一点。这些常量仅用于数据显示目的,没有理由进行改变。
如果有某种方法可以在同一个枚举中拥有多个枚举类型(如果这有任何意义的话),那就太好了。
感谢您的阅读。
最佳答案
您可以使用构造函数重载或重载与包装类的组合。如果您确定这些数据是不可变的并且将永远如此,那么我认为坚持使用枚举没有任何问题。为了将其放入一个类中,我已将枚举包含在 EnumTester 类中,但您可能不想这样做。
下面是一个在运行时打印“Cat Fish 5 20 Shark”和“Cow Fish”的示例,仅使用枚举和包装类。您可以将访问器放在任何需要的地方,具体取决于您实际想要对信息执行的操作 - 我试图演示如何组合这两个枚举,而不是如何使用它们。
package enums;
public class EnumTester
{
public enum MainType {
CAT_FISH("Cat Fish"), DOG_FISH("Dog Fish"), COW_FISH("Cow Fish"); //everything has a name...
private String name;
private MainType(String name){
this.name = name;
}
public String getTypeDetails(){
return name;
}
}
public enum SubType {
PREDATOR(5, 20, "Shark"), PREY(), MANATEE(); //but not everything has any additional information
private boolean isFullSubType;
private int val1;
private int val2;
private String subName;
private SubType(int val1, int val2, String subName){
this.isFullSubType = true;
this.val1 = val1;
this.val2 = val2;
this.subName = subName;
}
private SubType(){
this.isFullSubType = false;
this.val1 = -1;
this.val2 = -1;
this.subName = "none";
}
public String getSubTypeDetails()
{
if( isFullSubType ) {
return val1 + " " + val2 + " " + subName;
}
else {
return "";
}
}
}
private MainType mainType;
private SubType subType;
public EnumTester(MainType mainType, SubType subType)
{
this.mainType = mainType;
this.subType = subType;
}
public static void main(String[] args)
{
EnumTester kittyShark = new EnumTester(MainType.CAT_FISH, SubType.PREDATOR);
System.out.println(kittyShark.printDetails());
EnumTester cowManatee = new EnumTester(MainType.COW_FISH, SubType.MANATEE);
System.out.println(cowManatee.printDetails());
}
public String printDetails(){
return mainType.getTypeDetails()+" "+subType.getSubTypeDetails();
}
}
关于java - 以类似枚举的方式组织常量组的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37933110/