Есть несколько способов получить желаемое поведение, я предлагаю не использовать List<String>
для хранения допустимых категорий пунктов меню. Вы можете легко сделать это, используя Enum , и это также даст возможность выполнять действия с данным типом, если это необходимо.
enum MenuCategory {
APPETIZER("Appetizer"),
MAIN_COURSE("Main Course"),
DESSERT("Dessert");
private final String displayName;
MenuCategory(final String displayName) {
this.displayName = displayName;
}
public final String getDisplayName() {
return displayName;
}
}
Затем я использовал бы базовый абстрактный класс и создал бы подклассы для каждого типа. Это обеспечит создание каждого созданного элемента MenuItem с правильной категорией, а также даст вам возможность выполнять действия, указанные c для подкласса. Пример абстрактного класса Информация о наследовании
abstract static class MenuItem {
protected final double price;
protected final String description;
protected final MenuCategory category;
public MenuItem(final double price, final String description, final MenuCategory category) {
this.price = price;
this.description = description;
// Protect against a subclass being made that does not pass in a MenuCategory value.
this.category = Objects.requireNonNull(category);
}
public final double getPrice() {
return price;
}
public final String getDescription() {
return description;
}
public final MenuCategory getCategory() {
return category;
}
@Override
public final String toString() {
return category.getDisplayName() + ": " + description + " " + price;
}
}
static class AppetizerItem extends MenuItem {
public AppetizerItem(final double price, final String description) {
super(price, description, MenuCategory.APPETIZER);
}
}
static class MainCourseItem extends MenuItem {
public MainCourseItem(final double price, final String description) {
super(price, description, MenuCategory.MAIN_COURSE);
}
}
static class DessertItem extends MenuItem {
public DessertItem(final double price, final String description) {
super(price, description, MenuCategory.DESSERT);
}
}
И, наконец, для создания элемента MenuItem вы можете сделать
MenuItem lobsterRisotto = new MainCourseItem(14.99, "Lobster pasta in buttery red sauce");
//print the price of lobster risotto
System.out.println(lobsterRisotto.getPrice());