[英]How to call implemented method of generic enum in Java?
我正在嘗試將枚舉傳遞給方法,迭代枚舉值,並調用該枚舉對所有這些值實現的方法。 我在“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());
}
}
}
以下是將類型綁定到實現HasAlias的枚舉的方法:
<E extends Enum<E> & HasAlias>
一旦你改變了,剩下的就行了。
以下代碼編譯並運行良好,因為在Class上定義了getEnumConstants()。 不必說這個類是Enum的類。
public class EnumExtended {
static interface HasAlias{ String getAlias(); }
static class Identifier {
static void identify(Class<? extends HasAlias> enumClass ) {
for( HasAlias value : enumClass.getEnumConstants()) {
System.out.println( value.getAlias());
}
}
}
public static void main( String[] args ) {
Identifier.identify( Letters.class );
Identifier.identify( Numbers.class );
}
static enum Letters implements HasAlias {
A("The letter A"),
B("The letter B");
private final String alias;
@Override
public String getAlias(){return alias;}
Letters(String alias1) {
this.alias = alias1;
}
}
static enum Numbers implements HasAlias {
ONE("The number one"),
TWO("The number two");
private final String alias;
@Override public String getAlias(){return alias;}
Numbers(String alias1) {
this.alias = alias1;
}
}
}
通過引用上面的帖子,我能夠將我的代碼更改為以下內容以使其工作:
public <E extends Enum<?> & HasAlias> void identify(Class<E> enumClass)
{
for(E value : enumClass.getEnumConstants())
{
System.out.println(value.getAlias());
}
}
是的,您必須在界面中聲明您的功能。 為了成為一個接口,它必須包含抽象類,即沒有定義的函數。
所以在這里你忘記了正確地聲明你的功能。
String getAlias();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.