Java方法可以返回类型Enum吗?

Geo*_*pty 7 java generics enums method-signature

我可能是错的,但我猜测为什么不能在方法中本地声明枚举? 因为Java中的枚举不能在本地声明,因此返回类型Enum的方法有问题吗?我可以声明一个方法应该返回一个枚举(见下文),但是如何实现这样的方法来返回除null之外的任何东西,或者对在方法外声明的枚举的引用呢?我的第一个倾向是调查使用泛型,但如果SO社区可以帮助我避免它们,我想避免任何延迟.

private Enum resources() {
    return null;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*les 8

我认为你是对的,它只能返回null或在Enum其他地方宣布.但是你不一定要在编译时指定"别的东西".

  class EnumEnumerator<T extends Enum<T>> implements Iterable<T> {
    private final Class<T> enumClass;

    public EnumEnumerator(Class<T> enumClass) {
      this.enumClass = enumClass;
    }

    public Iterator<T> iterator() {
      T[] values = enumClass.getEnumConstants();
      return Arrays.asList(values).iterator();
    }
  }
Run Code Online (Sandbox Code Playgroud)

稍后,您通过专门化泛型构造函数并传入您感兴趣的枚举类来调用它:

class EnumEnumeratorDemo {
    enum Foo {
        BAR, BAZ, QUX;
        @Override public String toString() {
            return name().toLowerCase();
        }
    }

    public static void main(String[] args) {
        for (Foo f : new EnumEnumerator<Foo>(Foo.class)) {
            System.out.println(f);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

(显然这是一个人为的例子,在现实生活中你应该只调用Foo.values(),但你明白了.)