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

时间:2014-08-20 09:16:49

标签: 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;
    }
}

我可以循环浏览各个枚举:

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

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

1 个答案:

答案 0 :(得分:7)

使用泛型,例如:

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

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