简体   繁体   English

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

[英]How to remove Array list from Enumeration in Java

I need a way to remove array item declared as Filetype inside Enum in java class: 我需要一种方法来删除java类的Enum中声明为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))
}

So I need to remove FileType.TEST10 from PROCEDUREF . 所以我需要从PROCEDUREF删除FileType.TEST10 I created a class to implement this enumeration: 我创建了一个类来实现此枚举:

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;
        } 
    }

This instruction GUI_PROCEDURES.get(1).getOptionalFileTypes().remove(10); 此指令GUI_PROCEDURES.get(1).getOptionalFileTypes().remove(10); to remove FileType.TEST11 didn't work, could you please help me with this ? 删除FileType.TEST11无法正常工作,您能帮我吗? Thanks 谢谢

It is hard to tell if you don't provide the error you are getting nor a minimal, complete and verifiable example. 很难说出您是否没有得到的错误,也没有一个简单,完整和可验证的示例。

Anyway, the error could be because you are trying to remove an element of an immutable List . 无论如何,该错误可能是因为您试图删除不可变List的元素。

When you create a List with Arrays.asList what you get is an immutable list and if you try to call the method remove(10) a java.lang.UnsupportedOperationException exception will be thrown. 当您使用Arrays.asList创建一个List ,您得到的是一个不可变的列表,并且如果您尝试调用remove(10)方法,则会抛出java.lang.UnsupportedOperationException异常。

So probably you need to do some changes in your Procedure constructor to make those lists mutable. 因此,可能需要在Procedure构造函数中进行一些更改,以使这些列表可变。 One way to do it is to create a new List from the immutable one. 一种方法是从不可变List创建一个新List It would look similar to this: 它看起来类似于:

Procedure(List<FileType> optionalFileTypes /* other arguments */) {
    this.optionalFileTypes = new ArrayList(optionalFileTypes);
    // other constructor code
}

Arrays.asList() doesn't support operations like add(),addAll(),remove(),removeAll() since it returns immutable list. Arrays.asList()不支持add(),addAll(),remove(),removeAll()之类的操作,因为它返回不可变的列表。 You need to wrap any list which requires modification with ArrayList<>() . 您需要包装任何需要使用ArrayList<>()进行修改的列表。 Try out something like below : 试试下面的方法:

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)))}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM