2011-12-04 20 views
30

Estaba leyendo a través de la interfaz Map.Entry, cuando noté que es una interfaz "estática". No entendí exactamente qué es una interfaz estática y cómo es diferente de una interfaz normal.¿qué es una interfaz estática en java?

public static interface Map.Entry<K,V>

Esta es la definición de la interfaz. Documentos aquí: http://docs.oracle.com/javase/6/docs/api/java/util/Map.Entry.html

+3

posible duplicado de http://stackoverflow.com/questions/71625/why-would-a-static-inner-interface-be-used-in-java –

+0

Véase http://stackoverflow.com/questions/71625/why-a-static-inner-interface-be-used-in-java – esaj

+0

¿No es pertinente para las interfaces internas? – brainydexter

Respuesta

30

siento curiosidad por el caso cuando no es una interfaz interna.

El modificador static solo está permitido en una clase o interfaz anidada. En su ejemplo, Entry está anidado dentro de la interfaz Map.

Para las interfaces, el modificador static es en realidad opcional. La distinción no tiene sentido para las interfaces, ya que no contienen ningún código que pueda acceder al exterior this de todos modos.

+0

Gracias por señalar eso. No estaba al tanto del hecho de que la entrada es una interfaz interna y el modificador estático solo está permitido en la clase/interfaz anidada. – brainydexter

+11

"La distinción no tiene sentido para las interfaces" ... Esto es lo que confunde a tantos. No hay diferencia No deberían haber permitido la palabra clave "estática" para las interfaces. ¿Estoy aquí? –

+0

No entiendo esa explicación. Como entiendo el método estático es un método que no puede anular, lo mismo sobre la clase, si la clase es estática no puede anular los métodos porque todos son estáticos, pero la interfaz no puede ser estática porque en este caso no lo hará ser capaz de anular sus métodos. Entonces, ¿no entiendo cómo la interfaz puede ser estática? –

4

La interfaz interna estática y la interfaz interna es la misma, todas las reglas de acceso son las mismas que con la clase estática interna. Entonces, la interfaz interna puede ser accesible solo si tiene acceso a su clase/interfaz principal. En el caso siguiente, tendrá acceso a la interfaz B solo desde el paquete de la interfaz A, porque A tiene un modificador de acceso predeterminado. Por cierto: la interfaz B podría ser estática o no.

interface A { 
    void testA(); 
    public interface B { 
     void testB(); 
    } 
} 
+0

Soy curioso sobre el caso cuando no es una interfaz interna. – brainydexter

Cuestiones relacionadas