java fill用所有枚举值列表
我想用一个枚举的所有可能的值来填充一个列表
由于我最近爱上了EnumSet
,我利用了allOf()
EnumSet<Something> all = EnumSet.allOf( Something.class); List<Something> list = new ArrayList<>( all.size()); for( Something s : all) { list.add( s); } return list;
有没有更好的方法 (如在非混淆的class轮),以达到相同的结果?
我不会在第一个地方使用List,因为EnumSet比较合适,但是可以
List<Something> somethingList = Arrays.asList(Something.values());
要么
List<Something> somethingList = new ArrayList<Something>(EnumSet.allOf(Something.class));
有一个ArrayList
的构造函数是
ArrayList(Collection<? extends E> c)
现在, EnumSet
扩展AbstractCollection
所以你可以做
ArrayList<Something> all = new ArrayList<Something>(enumSet)
尝试
enum E { E1, E2, E3 } public static void main(String[] args) throws Exception { List<E> list = Arrays.asList(E.values()); System.out.println(list); }
Class.getEnumConstants()
List<SOME_ENUM> enumList = Arrays.asList(SOME_ENUM.class.getEnumConstants());
List<Something> result = new ArrayList<Something>(all);
EnumSet
是一个Java集合,因为它实现了Set
接口:
public interface Set<E> extends Collection<E>
因此,您可以使用EnumSet
对Collection进行任何操作。
这是更可读:
Object[] allValues = all.getDeclaringClass().getEnumConstants();
尝试这个:
... = new ArrayList<Something>(EnumSet.allOf(Something.class));
作为ArrayList
有一个构造函数Collection<? extends E>
Collection<? extends E>
。 但是只有当你真的想要使用EnumSet
时才使用这个方法。
所有的枚举都可以访问方法values()
。 它返回一个包含所有枚举值的数组:
... = Arrays.asList(Something.values());
你也可以使用:
Collections.singletonList(Something.values())