2012-02-01 16 views
6

Kompilator java pozwala mi pisać definicję klasy wewnątrz interfejsu. Czy są jakieś konkretne zastosowania tego?Zagnieżdżona klasa wewnątrz interfejsu

interface ClassInterface { 

    void returnSomething(); 
    int x = 10; 

    class SomeClass { 
    private int y; 

    private void classDoingSomething() {   
    } 
    } 
} 

Proszę wyjaśnić.

+1

możliwy duplikat: http://stackoverflow.com/questions/594789/practical-side-of-the-define-a-class-within-an-interface-in-java –

+1

możliwy duplikat [ wewnętrzna klasa w interfejsie] (http://stackoverflow.com/questions/2400828/inner-class-within-interface) – aioobe

Odpowiedz

2

Można by użyć go do ściśle wiązać pewien typ do interfejsu. Przeczytaj stronę This, aby uzyskać dalsze informacje i przykład definiowania klasy w interfejsie.

+0

Rzeczywiście .. Tutaj używam go do osadzenia implementacji interfejsu [obiekt Null] (https://en.wikipedia.org/wiki/Null_Object_pattern), więc nie muszę tworzyć pliku klasy dla niego. – Campa

4

Zastosowania są takie same, jak klasa zagnieżdżona w innej klasie: umożliwia ona klasyfikowanie klasy do interfejsu. Można sobie wyobrazić coś takiego:

public interface Switch { 

    public enum Status { 
     ON, OFF; 
    } 

    void doSwitch(); 
    Status getStatus(); 
} 

unika definiowania klasy najwyższego poziomu o nazwie SwitchStatus (bo Status może być zbyt nazwy rodzajowe).

0

deklarując klasę zagnieżdżony wewnątrz interfejsu byłoby bardzo złe programowanie. Interfejs to abstrakcja pojęcia, a nie jego implementacja. Dlatego szczegóły wykonawcze powinny być pozostawione z interfejsami

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

+0

_ "Pamiętaj, tylko dlatego, że możesz odciąć rękę piłą, nie oznacza to, że jest to szczególnie dobry pomysł "_ LOL ... W każdym razie uważam, że jest to z zasady ogólna zasada, ale szczególne przypadki mogą mieć zastosowanie bez" wyjątkowo złego ". – Campa

+1

Nie jestem pewien, czy się z tym zgadzam: używanie zagnieżdżonych klas z implementacją w interfejsie nie wiąże implementacji interfejsu do użycia tego kodu. Implementacje mogą zignorować zagnieżdżony kod implementacji i zapewnić własną implementację interfejsu. Gdy są używane mądrze, zagnieżdżone klasy pozwalają na lepsze enkapsulowanie/organizację kodu. –

Powiązane problemy