【发布时间】:2018-04-19 11:55:20
【问题描述】:
我需要创建一个“超级”枚举(此处为 ESideItem),它将记录“子”枚举(SALAD、FRY、TACO)并且我需要访问“子”枚举的字段(price)也来自外面。
我的意思是“超级”作为主要类型,“子”作为该主要类型的子类型。
一顿饭可以有多种类型的 SideItems(FRY、SALAD、TACO),并且这些 sideitems 中的每一个都可以有多种类型(即 SALAD 可以是 CHICKEN 或 AFGHAN 或 MIMOSA 等)。
根据 Ray Tayek 对this 问题的回答,我已经实现了这个:
public abstract class SideItem {
public enum FRY {
FRENCHFRY(25.25f), SEASONEDCURLYFRY(30.10f);
private float price;
FRY(float price) {
this.price = price;
}
public float getPrice() {
return price;
}
}
public enum SALAD{
AFGHANSALAD(50.25f), CHICKENSALAD(40.10f), MIMOSASALAD(45.89f);
private float price;
SALAD(float price) {
this.price = price;
}
public float getPrice() {
return price;
}
}
public enum TACO{
MONSTERTACO(26.25f), NACHOMONSTERTACO(35.10f);
private float price;
TACO(float price) {
this.price = price;
}
public float getPrice() {
return price;
}
}
public enum ESideItem {
FRY(SideItem.FRY.FRENCHFRY), SALAD(SideItem.SALAD.AFGHANSALAD), TACO(SideItem.TACO.MONSTERTACO);
ESideItem(Enum e) {
this.e = e;
}
public Object[] subValues() {
return e.getDeclaringClass().getEnumConstants();
}
final Enum e;
}
}
我实现Main.java如下:
public class Main {
public static void main(String[] args) {
for(SideItem.ESideItem aSideItem : SideItem.ESideItem.values()){
System.out.println(aSideItem);
for(Object o : aSideItem.subValues()){
System.out.format("%-15s",o);
System.out.println();
}
System.out.println();
}
}
}
输出是:
FRY
FRENCHFRY
SEASONEDCURLYFRY
SALAD
AFGHANSALAD
CHICKENSALAD
MIMOSASALAD
TACO
MONSTERTACO
NACHOMONSTERTACO
Main.java 类似于客户端,SideItem.java 类似于服务器端。我可以从SideItem.java 更改或添加ESubItem 枚举中的任何实例。 Main.java 应该根据那个变化给出输出
但我确实需要获取这些单独的 TACO、SALAD、FRY 的价格。
有没有办法使用枚举从Main.java 访问这些字段?
如果不是,那么我应该使用什么样的数据结构来解决这个问题?
【问题讨论】:
-
不完全确定您要达到的目标。您是否希望所有枚举都实现一个提供
getPrice()方法的通用接口?
标签: java data-structures enums