首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中从枚举中删除数组列表

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

Stack Overflow用户
提问于 2018-10-15 02:47:55
回答 2查看 263关注 0票数 2

我需要一种方法来移除在java类的枚举中声明为Filetype的数组项:

代码语言:javascript
复制
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))
}

所以我需要从PROCEDUREF中删除FileType.TEST10。我创建了一个类来实现这个枚举:

代码语言:javascript
复制
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;
        } 
    }

这个删除FileType.TEST11的指令GUI_PROCEDURES.get(1).getOptionalFileTypes().remove(10);不起作用,你能帮我吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-15 05:26:08

Arrays.asList()不支持像add(),addAll(),remove(),removeAll()这样的操作,因为它返回不可变列表。你需要包装任何需要用ArrayList<>()修改的列表。尝试如下所示:

代码语言:javascript
复制
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)))}
票数 -2
EN

Stack Overflow用户

发布于 2018-10-15 05:17:10

如果你不提供你得到的错误,或者一个最小的,完整的和可验证的例子,就很难判断。

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

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

因此,您可能需要在Procedure构造函数中做一些更改,以使这些列表成为可变列表。一种方法是从不可变的List创建一个新的a。它看起来像这样:

代码语言:javascript
复制
Procedure(List<FileType> optionalFileTypes /* other arguments */) {
    this.optionalFileTypes = new ArrayList(optionalFileTypes);
    // other constructor code
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52805971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档