2013-03-10 16 views
22

Ho una domanda su come inserire un enum Java nell'interfaccia. Per rendere più chiaro, vedere il codice seguente:implementazione enum all'interno dell'interfaccia - 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(); 
    ... 
} 

So che un'interfaccia consiste di metodi con corpi vuoti. Tuttavia, l'enum che ho usato qui ha bisogno di un costruttore e di un metodo per ottenere un valore associato. In questo esempio, l'interfaccia proposta non sarà solo composta da metodi con corpi vuoti. Questa implementazione è consentita?

Non sono sicuro di dover inserire la classe enum nell'interfaccia o nella classe che implementa questa interfaccia.

Se inserisco l'enum nella classe che implementa questa interfaccia, quindi il metodo public Numero getNumber() deve restituire il tipo di enum, che mi obbligherebbe a importare l'enum nell'interfaccia.

+0

Un ulteriore (concettuale) domanda. Supponendo che questo possa essere fatto, supponiamo che tu abbia una classe Impl implementa Thing {...}, e in qualche altro utente della classe, cosa Cosa = nuova Impl (...) e poi vuoi Numero n = cosa.getNumero(); - In che modo l'utente della classe sa qual è la definizione di Numero? –

risposta

23

È perfettamente legale dichiarare enum all'interno di interface. Nella tua situazione l'interfaccia è appena usata come spazio dei nomi per l'enumerazione e nient'altro. L'interfaccia viene utilizzata normalmente ovunque venga utilizzata.

+0

So che va bene usare enum all'interno di un'interfaccia. Ma creo anche un costruttore e un metodo all'interno di enum che è all'interno dell'interfaccia. Quindi è ancora ok per la definizione dell'interfaccia? – Joey

+0

possiamo avere un esempio funzionante per sopra scenario.im confuso :(:( – Deepak

+2

Ovviamente è ok, tutto ciò che è contenuto all'interno di 'enum' è parte di esso e non dell'interfaccia'. – Jack

0

In breve, sì, va bene.

L'interfaccia non contiene alcun corpo del metodo; invece, contiene quelli che tu definisci "corpi vuoti" e più comunemente conosciuti come firme del metodo .

Non importa che lo enum si trovi all'interno dell'interfaccia.

0

Sì, è legale. In una situazione "reale", Number implementerebbe Thing e Thing avrebbe probabilmente uno o più metodi vuoti.

3

Esempio per i sopra delle cose sono elencati di seguito:

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(); 
    } 

}