我需要一种方法来移除在java类的枚举中声明为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))
}
所以我需要从PROCEDUREF
中删除FileType.TEST10
。我创建了一个类来实现这个枚举:
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);
不起作用,你能帮我吗?谢谢
发布于 2018-10-15 05:26:08
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)))}
发布于 2018-10-15 05:17:10
如果你不提供你得到的错误,或者一个最小的,完整的和可验证的例子,就很难判断。
无论如何,错误可能是因为您试图删除不可变List
的元素。
当您使用Arrays.asList
创建一个List
时,您得到的是一个不可变的列表,如果您尝试调用remove(10)
方法,将会抛出java.lang.UnsupportedOperationException
异常。
因此,您可能需要在Procedure
构造函数中做一些更改,以使这些列表成为可变列表。一种方法是从不可变的List
创建一个新的a。它看起来像这样:
Procedure(List<FileType> optionalFileTypes /* other arguments */) {
this.optionalFileTypes = new ArrayList(optionalFileTypes);
// other constructor code
}
https://stackoverflow.com/questions/52805971
复制相似问题