gpt4 book ai didi

java - 在 java 中使用枚举类型

转载 作者:行者123 更新时间:2023-12-02 02:11:37 24 4
gpt4 key购买 nike

我需要创建一个“ super ”枚举(此处为ESideItem),它将保留“子”枚举的记录(SALADFRYTACO)并且我也需要从外部访问“sub”枚举的字段(price)。
我的意思是“ super ”作为主类型,“子”作为该主类型的子类型。
一顿饭可以有多种类型的副食品(油炸、沙拉、炸 Jade 米饼),并且这些副食品中的每一种都可以有多种类型(即沙拉可以是鸡肉、阿富汗或 MIMOSA 等)。
遵循Ray Tayekthis的回答问题我已经实现了这个:

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.javaESubItem 枚举中更改或添加任何实例。 Main.java 应根据该更改提供输出
但我确实需要获取这些单独的 TACO's、SALAD's、FRY's 的价格。
有没有办法使用枚举从 Main.java 访问这些字段?
如果不是那么我应该使用什么样的数据结构来解决这个问题?

最佳答案

您应该使用一个界面:

interface Food
{
float getPrice();
}

public enum Fry implements Food
{
FRENCH_FRY(25.25f), SEASONED_CURLY_FRY(30.10f);

private final float price;

FRY(float price) {
this.price = price;
}

@Override
public float getPrice() {
return price;
}
}

其他两个也一样......

然后你可以像这样组合它们:

public enum Meal implements Food {
HAPPY_MEAL(Fry.FRENCH_FRY, Fry.SEASONED_CURLY_FRY),
SAD_MEAL(Salad.AFGHAN_SALAD);

private final List<Food> items;

Meal (Food... items) {
this.items = Arrays.asList(food);
}

@Override
public float getPrice()
{
return (float) items.stream().mapToDouble(Food::getPrice).sum();
}
}

关于java - 在 java 中使用枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49920504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com