接口内部的枚举实现 - Java

时间:2013-03-10 04:05:34

标签: java interface enums enumeration

我有一个关于在界面中放置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()方法需要返回枚举类型,这将迫使我在界面中导入枚举。

4 个答案:

答案 0 :(得分:26)

enum内声明interface是完全合法的。在您的情况下,接口仅用作枚举的命名空间,仅此而已。无论您在何处使用,界面都会正常使用。

答案 1 :(得分:6)

以上事项的示例如下:

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();
  }

}

答案 2 :(得分:0)

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

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

enum在界面内并不重要。

答案 3 :(得分:0)

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