如何从Java中的枚举中删除数组列表

时间:2018-10-14 18:47:55

标签: java arraylist

我需要一种方法来删除java类的Enum中声明为Enumerable的数组项:

Filetype

所以我需要从public enum Procedure { NONE("NONE", "procedure.none", false, null, Collections.<FileType> emptyList(), Collections.<FileType> emptyList()), PROCEDUREF("PROCEDUREF", "procedure.procedureD", false, null, Arrays.asList(FileType.REQUEST), Arrays.asList(FileType.TEST1, FileType.TEST2,FileType.TEST3,FileType.TEST4,FileType.TEST5, FileType.TEST6,FileType.TEST7, FileType.TEST8, FileType.TEST9,FileType.TEST10, FileType.TEST11)) } 中删除FileType.TEST10。我创建了一个类来实现此枚举:

PROCEDUREF

此说明public class FormObject { private static final List<Procedure> GUI_PROCEDURES = Arrays.asList(Procedure.NONE, Procedure.PROCEDUREF); public List<Procedure> getProcedures() { if (userdetail.ispilot()) { GUI_PROCEDURES.get(1).getOptionalFileTypes().remove(10); return GUI_PROCEDURES; } } 删除了GUI_PROCEDURES.get(1).getOptionalFileTypes().remove(10);无效,您能帮我吗? 谢谢

2 个答案:

答案 0 :(得分:0)

很难说出您是否没有得到的错误,也没有一个简单,完整和可验证的示例。

无论如何,该错误可能是因为您试图删除不可变的List的元素。

当您使用List创建一个Arrays.asList时,得到的是一个不可变的列表,并且如果您尝试调用方法remove(10),则会抛出java.lang.UnsupportedOperationException异常。 / p>

因此,可能需要在Procedure构造函数中进行一些更改,以使这些列表可变。一种方法是从不可变的List创建一个新的Procedure(List<FileType> optionalFileTypes /* other arguments */) { this.optionalFileTypes = new ArrayList(optionalFileTypes); // other constructor code } 。看起来类似于:

{
  "jwt": "MY_TOKEN"
}

答案 1 :(得分:-2)

Arrays.asList()不支持add(),addAll(),remove(),removeAll()之类的操作,因为它返回不可变的列表。 您需要包装任何需要使用ArrayList<>()进行修改的列表。尝试以下类似的方法:

public enum Procedure {
    NONE("NONE", "procedure.none", false, null, Collections.<FileType> emptyList(), Collections.<FileType> emptyList()), 
   PROCEDUREF("PROCEDUREF", "procedure.procedureD", false, null, Arrays.asList(FileType.REQUEST), new ArrayList<>(Arrays.asList(FileType.TEST1, FileType.TEST2,FileType.TEST3,FileType.TEST4,FileType.TEST5, FileType.TEST6,FileType.TEST7, FileType.TEST8, FileType.TEST9,FileType.TEST10, FileType.TEST11)))}