簡體   English   中英

如何在Java中調用泛型枚舉的實現方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM