2016-07-07 4 views
0

どのようにドットがこのインターフェイス名で許可されている、私は名前でドットを持つ別のクラス/インターフェイス名を作成することはできません。HowsではMap.Entryのような名前を許可していますか?私はドットが許可されていないと思った

+7

あなたがアクセスしている '' Map''インタフェースの内部インタフェースです。 – SomeJavaGuy

+0

参照用のリンクhttps://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html。それについての議論があります - > http://stackoverflow.com/questions/70324/java-inner-class-and-static-nested-class –

+1

@KevinEsche実際にはインターフェイスです;) – vikingsteve

答えて

5

Entryは、Mapインターフェイス内のネストインターフェイスです。あなたがしたい場合は、同様のものを作成することができます

class MyClass { 
    static class Nested { } 
    public static void main(String[] args) { 
    MyClass.Nested n = new MyClass.Nested(); 
    } 
} 

以上の直接あなたの質問に答えるために:

class MyClass { 
    static class MyEntry implements Map.Entry { } 
    public static void main(String[] args) { 
    Map.Entry n = new MyEntry(); 
    } 
    interface Map { 
    interface Entry {} 
    } 
} 
1

を内部クラスを作成するときにケビンEscheは、コメントしたように、それは完全修飾名がfoo.bar.Outer.Innerになるのです。

1

エントリインターフェイスは、マップインターフェイスで宣言されています。これは内部インターフェイスです。だから、それを使用するためには、Mapクラスへの参照、つまりMap.Entryを作成する必要があります。

+1

もちろん、それはパブリックインターフェイスです、そうでなければあなたは別のクラスからそれを参照することができませんでした。インターフェースのすべてのメンバーは自動的に 'public'、' Map'はインターフェースです、 'Entry'はインターフェース' Map'のメンバーですので 'public'です。 –

+0

@Erwin Bolwidtもちろん! – Zava

関連する問題