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