38

我有一个关于在界面中放置 Java 枚举的问题。为了更清楚,请看以下代码:

public interface Thing{
   public enum Number{
       one(1), two(2), three(3);
       private int value;
       private Number(int value) {
            this.value = value;
       }
       public int getValue(){
        return value;
       }
   }

   public Number getNumber();
   public void method2();
   ...
}

我知道接口由具有空主体的方法组成。但是,我在这里使用的枚举需要一个构造函数和一个方法来获取关联的值。在此示例中,建议的接口将不仅仅包含具有空主体的方法。是否允许此实施?

我不确定是否应该将枚举类放在接口或实现此接口的类中。

如果我把enum放到实现这个接口的类中,那么public Number getNumber()方法需要返回enum的类型,这会迫使我在接口中导入enum。

4

4 回答 4

32

enuminterface. _ 在您的情况下,该接口仅用作枚举的命名空间,仅此而已。无论您在哪里使用,该接口都可以正常使用。

于 2013-03-10T04:07:27.250 回答
9

下面列出了上述内容的示例:

public interface Currency {

  enum CurrencyType {
    RUPEE,
    DOLLAR,
    POUND
  }

  public void setCurrencyType(Currency.CurrencyType currencyVal);

}


public class Test {

  Currency.CurrencyType currencyTypeVal = null;

  private void doStuff() {
    setCurrencyType(Currency.CurrencyType.RUPEE);
    System.out.println("displaying: " + getCurrencyType().toString());
  }

  public Currency.CurrencyType getCurrencyType() {
    return currencyTypeVal;
  }

  public void setCurrencyType(Currency.CurrencyType currencyTypeValue) {
    currencyTypeVal = currencyTypeValue;
  }

  public static void main(String[] args) {
    Test test = new Test();
    test.doStuff();
  }

}
于 2015-11-04T03:53:05.773 回答
0

简而言之,是的,这没关系。

该接口不包含任何方法体;相反,它包含您所说的“空体”,通常称为方法签名

不在enum接口内部。

于 2013-03-10T05:43:23.763 回答
0

是的,这是合法的。在“真实”情况下,Number 会实现 Thing,而 Thing 可能会有一个或多个空方法。

于 2013-03-10T06:10:45.050 回答