2016-07-07 42 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

这是因为EntryMap接口内的嵌套接口。您可以创建类似的东西,如果你想:

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

Entry接口在Map接口中声明。这是一个内部界面。所以为了使用它,我们必须引用Map类,因此Map.Entry。

+1

当然这是一个公共接口,否则你不能从另一个类引用它。接口的所有成员都是自动的'public',而'Map'是一个接口,'Entry'是接口'Map'的成员,所以它也是'public'。 –

+0

@Erwin Bolwidt当然! – Zava