我想传递一个枚举到一个方法,迭代该枚举值,并调用该枚举在所有这些值上实现的方法。我收到了“value.getAlias()”部分的编译器错误。它说“方法getAlias()对于E类型是未定义的”我试图说明E实现了HasAlias接口,但它似乎不起作用。这是可能的,如果是这样,我如何修复下面的代码来做我想要的?下面的代码只是为了展示我的过程,我不打算在枚举中打印值的名称,而是展示我的问题。如何在Java中调用通用枚举的实现方法?
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());
}
}
}
+1:精确度很高,我注意到“&” – Aubin
我喜欢这个答案和Aubin提供的答案,但是这个参数看起来更加明确。你们中的任何一个对你的哪种方法更好有评论? –
这个答案表达你的意图。我曾经在生产代码中使用过这个代码,我希望团队使用enum来保持一致性(因为它似乎也是你的意图),因此代码完成将为具体类型类的用户提供该类方法可用的选项列表,枚举被用于某些方法的参数。 – Bohemian