2013-03-10 13 views
22

Mam pytanie dotyczące wstawienia wyliczenia Java w interfejsie. Aby uczynić go bardziej zrozumiałym, zobacz następujący kod:implementacja enum wewnątrz interfejsu - Java

public interface Thing{ 
    public enum Number{ 
     one(1), two(2), three(3); 
     private int value; 
     private Number(int value) { 
      this.value = value; 
     } 
     public int getValue(){ 
     return value; 
     } 
    } 

    public Number getNumber(); 
    public void method2(); 
    ... 
} 

Wiem, że interfejs składa się z metod z pustych ciał. Jednak wyliczenie, którego tutaj używałem, wymaga konstruktora i metody uzyskania powiązanej wartości. W tym przykładzie proponowany interfejs nie będzie składał się tylko z metod z pustymi obiektami. Czy ta implementacja jest dozwolona?

Nie jestem pewien, czy powinienem umieścić klasę enum wewnątrz interfejsu lub klasę, która implementuje ten interfejs.

Jeśli umieściłem wyrażenie w klasie, która implementuje ten interfejs, to metoda public Number getNumber() musi zwrócić typ wyliczenia, co zmusiłoby mnie do zaimportowania wyliczenia w interfejsie.

+0

dodatkowy (koncepcyjne) zapytania. Zakładając, że da się to zrobić, załóżmy, że masz klasę Impl implementuje Thing {...}, i w innej klasie User, Thing thing = new Impl (...), a następnie chcesz Number n = thing.getNumber(); - W jaki sposób użytkownik klasy wie, jaka jest definicja numeru? –

Odpowiedz

23

Jest całkowicie zgodne z prawem, aby enum zadeklarowane wewnątrz interface. W twojej sytuacji interfejs jest po prostu używany jako przestrzeń nazw dla wyliczenia i nic więcej. Interfejs jest używany normalnie, gdziekolwiek go używasz.

+0

Wiem, że można używać wyliczania wewnątrz interfejsu. Ale robię również konstruktor i metodę wewnątrz enum, która jest wewnątrz interfejsu. Czy nadal jest w porządku dla definicji interfejsu? – Joey

+0

możemy mieć działający przykład dla powyższego scenario.im mylić :(:( – Deepak

+2

Oczywiście jest dobrze, wszystko, co jest zawarte wewnątrz 'enum' jest jego częścią, a nie z' interfejsu'. – Jack

0

Krótko mówiąc, tak, to jest w porządku.

Interfejs nie zawiera żadnych ciał metod; zamiast tego zawiera to, co określasz jako "puste obiekty" i bardziej powszechnie znane jako sygnatury metody.

Nie ma znaczenia, że ​​enum znajduje się wewnątrz interfejsu.

0

Tak, jest legalne. W "prawdziwej" sytuacji Numer mógłby zaimplementować Thing, a Thing prawdopodobnie miałby jedną lub więcej pustych metod.

3

przykład dla wyżej wymienionych przedmiotów są podane poniżej:

public interface Currency { 

    enum CurrencyType { 
    RUPEE, 
    DOLLAR, 
    POUND 
    } 

    public void setCurrencyType(Currency.CurrencyType currencyVal); 

} 


public class Test { 

    Currency.CurrencyType currencyTypeVal = null; 

    private void doStuff() { 
    setCurrencyType(Currency.CurrencyType.RUPEE); 
    System.out.println("displaying: " + getCurrencyType().toString()); 
    } 

    public Currency.CurrencyType getCurrencyType() { 
    return currencyTypeVal; 
    } 

    public void setCurrencyType(Currency.CurrencyType currencyTypeValue) { 
    currencyTypeVal = currencyTypeValue; 
    } 

    public static void main(String[] args) { 
    Test test = new Test(); 
    test.doStuff(); 
    } 

}