2012-05-11 14 views
14

Encontré el siguiente ejemplo en uno de los foros de java.¿De qué sirve escribir una clase dentro de una interfaz?

interface employee{ 
    class Role{ 
      public String rollname; 
      public int roleId; 
      public Object person; 
    } 
    Role getRole(); 
    // other methods 
} 

He ejecutado el fragmento de código anterior y se está compilando correctamente. Lo que significa que podemos tener una clase dentro de una interfaz.

Mi pregunta es ¿de qué sirve tener tales clases? ¿Hay algún patrón de diseño?

+2

incluso si esta compilación, no es algo que nadie debería hacer. – memo

+1

posible duplicado de [clase interna dentro de la interfaz] (http://stackoverflow.com/questions/2400828/inner-class-within-interface) – NPE

+4

@memo - No estoy de acuerdo. Hay situaciones en las que esto es lo correcto. –

Respuesta

9

Este fragmento de código ya responde su pregunta. La clase Role es utilizada por la interfaz employee en el método getRole(). El diseñador de la interfaz decidió que esta clase está tan estrechamente unida a la interfaz que vale la pena definirla dentro de esa interfaz para enfatizar la importancia de esa clase para la interfaz.

También proporciona el espacio de nombres semántico para la clase: employee.Role. Sin embargo, veo este tipo de constructo por primera vez, mientras que las clases estáticas definidas dentro de otras clases son bastante comunes (para los mismos fines que los anteriores).

4

El uso aquí es el mismo que para cualquier clase interna. Limita el alcance de la clase a donde pertenece.

En este caso, el implementador pensó que Role no encajaba como una clase de nivel superior, y lo puso dentro de la interfaz employee. La razón de esto es muy probable que la intención de Role sea acoplar estrechamente con employee.

1

La clase proporciona una parte importante de la interfaz: Un valor de retorno para getRole. Entonces tiene sentido definir la clase dentro de la interfaz.

sería un poco más común para definir una interfazdentro de una interfaz para este tipo de cosas (como Map.Entry en java.util), para permitir una mayor flexibilidad en la aplicación de la interfaz, pero se puede hacer la clase también.

0

No escribiría una pieza de código, pero creo que el uso es enfatizar la dependencia entre la clase y la interfaz.

Las interfaces se utilizan para definir API y en este caso, el autor puede haber querido decir que "estas dos no podrían vivir separadas".

Espero que esto ayude.

1

No es un problema de compilación ligero con su ejemplo, que he fijado a continuación:

public interface Employee { 
class Role{ 
     public String rollname; 
     public int roleId; 
     public Object person; 
    } 

Role getRole(); 
} 

Aparte de eso, sí, que se compila. Eso no significa que hacer esto sea una buena idea. Es una forma más de espaciar el nombre de tu clase Role, pero creo que es bastante fea.

0

No escribiría una pieza de código, pero creo que el uso es enfatizar la dependencia entre la clase y la interfaz.

Las interfaces se utilizan para definir API y en este caso, el autor puede haber querido decir que "estas dos no podrían vivir separadas".

Cuestiones relacionadas