2012-02-01 7 views
6

Javaコンパイラを使用すると、インターフェイス内にクラス定義を記述できます。これの具体的な用途はありますか?インターフェイス内のネストされたクラス

interface ClassInterface { 

    void returnSomething(); 
    int x = 10; 

    class SomeClass { 
    private int y; 

    private void classDoingSomething() {   
    } 
    } 
} 

説明してください。

+1

可能な複製:http://stackoverflow.com/questions/594789/practical-side-of-ability-to-define-a-class-within-an-interface-in-java –

+1

可能な複製[インターフェイス内の内部クラス](0120-17753-1) – aioobe

答えて

2

から除外されるべきです。詳細は、Thisページを参照してください。インターフェース内でクラスを定義する例もあります。

+0

確かに..ここでは、[Nullオブジェクト](https://en.wikipedia.org/wiki/Null_Object_pattern)のインターフェイス実装を埋め込むために使用していますので、クラスファイルを作成する必要はありません。 – Campa

4

この使用法は、クラスが他のクラスにネストされたものと同じです。つまり、クラスをインタフェースにスコープすることができます。 (Statusがあまりにも一般的な名前である可能性があるため)それはSwitchStatusという名前のトップレベルのクラスを定義する回避

public interface Switch { 

    public enum Status { 
     ON, OFF; 
    } 

    void doSwitch(); 
    Status getStatus(); 
} 

:あなたはこのようなものを想像することができます。

0

インターフェイス内にネストされたクラスを宣言すると、プログラミングが非常に悪くなります。インタフェースはコンセプトの抽象化であり、コンセプトの実装ではありません。したがって、実装の詳細は、あなたがしっかりインターフェイスに特定のタイプを結合するためにそれを使用するインターフェイス

http://onjava.com/onjava/excerpt/HardcoreJava_chap06/index2.html

+0

_「覚えておいてください。鋸を使って手を切ることができるということは、良いアイデア "_ LOL ...とにかく、これは原則として真実だと考えていますが、特別なケースは「非常に悪い」ことなく適用することができます。 – Campa

+1

私はこれに同意します:インターフェイス内の実装でネストされたクラスを使用しても、そのコードを使用するインターフェイスの実装は結び付けられません。実装はネストされた実装コードを無視し、独自のインタフェースの実装を提供することは自由です。賢明に使用すると、ネストされたクラスはコードのより良いカプセル化/編成を可能にします。 –

関連する問題