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

インターフェイスが空の本体を持つメソッドで構成されていることを私は知っています。ただし、ここで使用した列挙型には、関連付けられた値を取得するためのコンストラクターとメソッドが必要です。この例では、提案されたインターフェースは、空の本体を持つメソッドだけで構成されているわけではありません。この実装は許可されていますか?

列挙型クラスをインターフェイス内に配置する必要があるのか​​、このインターフェイスを実装するクラスを配置する必要があるのか​​わかりません。

このインターフェイスを実装するクラスに列挙型を配置する場合、メソッドpublic Number getNumber()は列挙型の型を返す必要があります。これにより、インターフェイスに列挙型をインポートする必要があります。

4

4 に答える 4

32

enum内で宣言することは完全に合法interfaceです。あなたの状況では、インターフェースは列挙型の名前空間としてのみ使用され、それ以上のものはありません。インターフェースは、どこで使用する場合でも通常使用されます。

于 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にはおそらく1つ以上の空のメソッドがあります。

于 2013-03-10T06:10:45.050 に答える