在Java中循环遍历枚举而不重复

lko*_*lko 0 java enums

是否可以循环遍历任何枚举而不重复循环?

说我有两个枚举.

public enum Type {

    X("x type"),
    Y("y type"),
    Z("z type"),

    private String text;

    private Type(String text) {
        this.text = text;
    }

    @Override
    public String toString() {
        return text;
    }
}

public enum Size {

    SMALL("tiny"),
    MED("mid"), ...

    private String text;

    private Size(String text) {
        this.text = text;
    }

    @Override
    public String toString() {
        return text;
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样遍历各个枚举:

for (Type type : Type.values()) {
    ... do something with type.name(), type.toString()
}

for (Size s : Size.values()) {
    ... do "the same" something with s.name(), S.toString()
}
Run Code Online (Sandbox Code Playgroud)

是否可以循环遍历它们而不重复每个枚举类型的代码?在Java中避免整个循环复制的最佳方法是什么?

Tho*_*mas 7

使用泛型,即:

public <E extends Enum<E>>  void loopEnum( Class<E> enumClass ) {
  for( E e : enumClass.getEnumConstants() ) {
    System.out.println( e.toString() );
  }
}
Run Code Online (Sandbox Code Playgroud)

所以基本上你告诉方法它应该接受任何枚举类,即一个扩展Enum<E>隐含的枚举类.

  • ......和反思:) - 但总是"以强大的力量来承担巨大的责任" (2认同)