2012-02-01 11 views
6

El compilador de Java me permite escribir una definición de clase dentro de una interfaz. ¿Hay algún uso específico de esto?Clase anidada dentro de una interfaz

interface ClassInterface { 

    void returnSomething(); 
    int x = 10; 

    class SomeClass { 
    private int y; 

    private void classDoingSomething() {   
    } 
    } 
} 

Explique.

+1

posible duplicar: http://stackoverflow.com/questions/594789/practical-side-of-the-ability-to-define-a-class-within-an-interface-in-java –

+1

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

Respuesta

2

Se podría utilizarlo para unir firmemente un cierto tipo de una interfaz. Lea la página This para obtener más información y un ejemplo de definición de una clase dentro de una interfaz.

+0

Indeed .. Aquí lo estoy usando para incrustar la implementación [objeto nulo] (https://en.wikipedia.org/wiki/Null_Object_pattern) de una interfaz, por lo que no es necesario que cree un archivo de clase para ella. – Campa

4

Los usos son los mismos que una clase anidada en otra clase: permite el alcance de la clase a la interfaz. Se podría imaginar algo como esto:

public interface Switch { 

    public enum Status { 
     ON, OFF; 
    } 

    void doSwitch(); 
    Status getStatus(); 
} 

Evita la definición de una clase de nivel superior denominada SwitchStatus (porque Status podría ser un nombre demasiado genérico).

0

declarar una clase anidada dentro de una interfaz sería una programación extremadamente mala. Una interfaz es una abstracción de un concepto, no una implementación de uno. Por lo tanto, los detalles de implementación deben dejarse fuera de las interfaces

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

+0

_ "Recuerda, solo porque puedes cortarte la mano con una sierra no significa que sea particularmente buena idea "_ LOL ... De todos modos, creo que esto es cierto como regla general, pero los casos especiales pueden aplicarse sin ser tan" extremadamente malo ". – Campa

+1

No estoy seguro Estoy de acuerdo con esto: el uso de clases anidadas con la implementación dentro de una interfaz no ata las implementaciones de la interfaz para usar ese código. Las implementaciones pueden ignorar el código de implementación anidado y proporcionar su propia implementación de la interfaz. Cuando se utilizan con prudencia, las clases anidadas pueden permitir una mejor encapsulación/organización del código. –

Cuestiones relacionadas