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