java - 在Java中,如何隐藏enum值?

我有一个具有权限的enum类。


public enum UserRight {


 SYSTEMMANAGEMENT, USERADMINISTRATION, ROLEADMINISTRATION, 


 STRUCTUREADMINISTRATION, DOCUMENTADMINISTRATION;


}



现在我想把我所有的权利都加载到一个列表中,除了SYSTEMMANAGEMENT ,我现在就这样做:


availrightslist.addAll(Arrays.asList(UserRight.values()));



如何在没有SYSTEMMANAGEMENT权限的情况下加载所有权限?

时间:

你可以在添加所有内容后删除它:


availrightslist.remove(UserRight.SYSTEMMANAGEMENT);



或者使用一些EnumSet魔术:


Set<UserRight> rights = EnumSet.complementOf(EnumSet.of(UserRight.SYSTEMMANAGEMENT));



一般情况下,如果你有enumCollection,建议使用EnumSet ,因为有UserRight两次并没有什么意义。

你可以简单地删除你不想要的权利。


availrightslist.addAll(Arrays.asList(UserRight.values()));


availrightslist.remove(UserRight.SYSTEMMANAGEMENT);



或者你只需要添加你需要的东西。


for(UserRight right : UserRight.values()) {


 if(right != UserRight.SYSTEMMANAGEMENT)


 availrightslist.add(right);


}



不支持隐藏enum值的构建,你必须手动筛选它:


List<UserRight> okRights = Arrays.stream(UserRights.values())


 .filter(userRight -> userRight != UserRight.SYSTEMMANAGEMENT)


 .collect(Collectors.toList());


availablerightslist.addall(okRights);



你可以试试这个我不确定它是不是一个最优的解决方案。


Arrays.asList(UserRight.values())


 .stream()


 .filter(value-> value != UserRight.SYSTEMMANAGEMENT)


 .collect(Collectors.toList())



...