如何在Java中调用泛型枚举的实现方法?

Jus*_*man 3 java generics parameters enums interface

我正在尝试将枚举传递到方法中,迭代该枚举值,然后调用该枚举对所有这些值实现的方法。我在“value.getAlias()”部分收到编译器错误。它说“方法 getAlias() 对于类型 E 未定义” 我试图表明 E 实现了 HasAlias 接口,但它似乎不起作用。这可能吗?如果可以,我该如何修复下面的代码来执行我想要的操作?下面的代码只是为了展示我的过程,我的目的并不是仅仅打印枚举中的值的名称,而是为了演示我的问题。

public interface HasAlias{ String getAlias(); };

public enum Letters implements HasAlias
{
   A("The letter A"),
   B("The letter B");

   private final String alias;

   public String getAlias(){return alias;}

   public Letters(String alias)
   {
     this.alias = alias;
   }

}

public enum Numbers implements HasAlias
{
   ONE("The number one"),
   TWO("The number two");

   private final String alias;

   public String getAlias(){return alias;}

   public Letters(String alias)
   {
     this.alias = alias;
   }

}

public class Identifier
{
   public <E extends Enum<? extends HasAlias>> void identify(Class<E> enumClass)
   {
      for(E value : enumClass.getEnumConstants())
      {
         System.out.println(value.getAlias());
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 5

以下是将类型绑定到实现 HasAlias 的枚举的方法:

<E extends Enum<E> & HasAlias>
Run Code Online (Sandbox Code Playgroud)

一旦你做出这样的改变,剩下的就会起作用。