gpt4 book ai didi

java - 创建枚举时出错,每个值都指向一个字符串列表

转载 作者:行者123 更新时间:2023-11-30 06:40:02 25 4
gpt4 key购买 nike

public enum Test implements IsSerializable {

FOOD("FOOD", getFoodItems()),//---Getting Error here
HOTEL("HOTEL", getHotels());//---Getting Error here

private String name;
static final List<String> categories = new LinkedList<String>();

Test(String name) {
this.name = name;
}
public List<String> getCategories() {
return this.categories;
}


private List<String> getFoodItems(){
categories.add("Food item1");
categories.add("Food item2");
return categories;
}
private List<String> getHotels(){
categories.add("Hotel 1");
categories.add("Hotel 2");
return categories;
}
}

创建此枚举时出现错误。我是这种 Enum 的新手。任何人都可以帮助完成这项工作吗?

最佳答案

3个主要的事情:

1。 getFoodItems()getHotels() 应该是静态的。

这些方法需要现有的枚举存在,甚至不使用枚举中的任何东西。

2。不要将 categories 声明为静态属性..

您使用相同的 categories 对象(或对同一对象的引用),因为它是静态的。删除它之前的 static 关键字,使其成为成员属性。每个对象都应该有自己的列表,如果它是 static,这是不可能的。

3。在方法中创建列表并将其提供给构造函数

您使用 2 个参数调用构造函数:名称和列表,但构造函数只接受名称。在方法中创建 categories 对象并将其返回给构造函数。

@ Holger 的 3 项额外改进(看评论)

4。在分发对可变列表的引用之前请三思。

如果您将可变列表传递给某个方法,该方法可能会更改列表,从而导致可能难以发现的错误。

5。 name 完全过时了,因为它没有 getter,而且它的值无论如何都与内在的 name() 匹配。

你可能想在任何情况下添加它,但枚举已经有一个返回枚举名称的方法 name()

6。当您不需要 LinkedList 的特殊功能时(换句话说,永远不要使用它),不要使用 LinkedList,而是使用 ArrayList 或者更好,List.of(item1, item2),创建一个不可变列表。

ArrayList 通常比 LinkedList 性能更高,因为它基于数组,而 LinkedList 是一个链表(顾名思义) ) 必须为每个包含对其邻居的引用的元素创建一个对象。如果您需要在列表的中间(或开头)添加元素,或者如果您需要 QueueDequeue 功能,这是一个优势。

public enum Test implements IsSerializable {
FOOD("FOOD",getFoodItems()),//---Getting Error here.
HOTEL("HOTEL",getHotels());//---Getting Error here
private String name;
private final List<String> categories;
private Test(String name,List<String> categories) {
this.name = name;
this.categories=categories;
}
public List<String> getCategories() {
return this.categories;
}
private static List<String> getFoodItems(){
List<String> categories = new LinkedList<>();
categories.add("Food item1");
categories.add("Food item2");
return categories;
}
private static List<String> getHotels(){
List<String> categories = new ArrayList<>();
categories.add("Hotel 1");
categories.add("Hotel 2");
return categories;
}
}

[编辑]另请注意boot-and-bottet的回答。

关于java - 创建枚举时出错,每个值都指向一个字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59015841/

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