2017-04-04 10 views
2

クラス内で "Flags"のインタフェースを使用しています。私はオブジェクトとフラグインタフェースを実装することができるようにしたい、それは私がそれに入れてすべてのサブフラグを継承していJava内のネストされたインタフェース

public interface Flags 

それを呼び出すことができます。例

public interface Flags{ 
    static int flag1 = 0; 

    public interface Size{ 
     public static int big = 1; 
     public static int small = 2; 

    public interface Direction{ 
     public static int left = 3; 
     public static int right = 4; 

は、だから私は何をしたいオブジェクトfooが

public class Foo implements Flags{} 

をフラグクラスを実装し、すべてのサブフラグ(すなわち、右、左、大、小、FLAG1)へのアクセス権を持っていることです。

しかし、私はFOO1のサイズを実装し、サイズのみフラグ

public class Foo1 implements Flags.Size{} 
へのアクセス権を持つことができますように、私もそれをしたい

私は、ネストされたインタフェースが可能であることを示している。このCan we define an interface within an interface?を見つけましたが、私はどのように確認していません私が探している方法でこれを行う。

私は単に私が探していることをやってみると大惨​​事になります。 は、私が何を意味するか、私はFooのは大きな旗にアクセスしたい場合、私はこれは理想からはほど遠い

public class Foo implements Flags{ 
    final int size = Size.big; 
} 

次の手順を実行しなければならないだろうということです。私はずっとあなたが、この動作のために列挙型を使用していないのはなぜ以下

public class Foo implements Flags{ 
    final int size = big; 
} 
+0

インターフェイスの概念をクラスの概念と混在させているかもしれません。インターフェイスは特定の動作を約束しているため、実装するものはその動作を定義する必要があります。しかし、現在、クラスの機能であるフィールドを定義しようとしています。しかし、クラスを入れ子にすることができます! – Ishnark

答えて

4

を行うことを好むでしょうか?これは静的な値enum tutorialであるため、これには列挙型を使用する必要があります。

+0

Enumsオブジェクトについて聞いたことはありませんが、それは最も理にかなっています。ありがとうございました –

0

定数を格納するインターフェイスを使用することは悪い習慣(Effective JavaのJoshua Blochが指摘しているように)と考えられていますが、そのような目的を果たすために発明されたものではありません。この目的または列挙のためにクラスの静的メンバーを使用することを検討する必要があります。

しかし、それが悪い習慣ではなかったとしても、そのようなことは意味をなさないでしょう。あなたのクラスがインターフェイスにアクセスできる場合、そのクラスのすべてのメンバーにアクセスすることもできます。

0

なぜインターフェイスをネストしていますか?ただ、separetelyその個々のソースファイル内の各1をサブインターフェイスを宣言した後、サブインターフェイスのすべてからあなたFlagsインターフェイスの継承を行います。これは、継承するので、あなたはあなたのFooクラスがあなたのFlagsインターフェイスを実装するためにできるようになる

public interface Flags extends Size, Direction { 

    int flag1 = 0; 
} 

また、Foo1クラスにSizeインターフェイスのみを実装させることもできます。

注1:デフォルトですべてが公開されているため、インターフェイスメンバーをpublicと宣言することは意味がありません。そして、メンバーがstaticの場合も同様です。メンバーがメソッドでない場合、それは自動的にstaticになります。

注2:他の人が指摘しているように、定数を格納するインタフェースを使用することは悪い習慣とみなされます。代わりにenumを使用する必要があります。しかし、今日は純粋な気分ではなく、列挙型を使用すると、enumを継承することができないため、後の動作を許可しません。

関連する問題