2010-01-16 10 views
6

EDIT: Risolto, vedi sottoJava - Assicurarsi un oggetto implementa un'interfaccia

Ciao,

In Java, ho ricevuto un oggetto che potrebbe essere di qualsiasi classe. MA - quell'oggetto dovrà sempre implementare un'interfaccia, quindi quando chiamo metodi definiti dall'interfaccia, quell'oggetto conterrà quel metodo.

Ora, quando si tenta di chiamare un metodo personalizzato su un oggetto generico in Java, si spera di digitare. Come posso in qualche modo dire al compilatore che il mio oggetto implementa quell'interfaccia, quindi chiamare il metodo è OK.

In sostanza, quello che sto cercando è qualcosa di simile:

Object(MyInterface) obj; // Now the compiler knows that obj implements the interface "MyInterface" 
obj.resolve(); // resolve() is defined in the interface "MyInterface" 

Come posso fare questo in Java?

RISPOSTA: OK, se l'interfaccia si chiama MyInterface si può semplicemente mettere

MyInterface obj; 
obj.resolve(); 

Ci scusiamo per non pensare prima di pubblicare ....

+0

* smile * - +1 per il tuo ultimo commento :-) –

risposta

1
if (object instanceof MyInterface) { 
    ((MyInterface) object).resolve(); 
} 
1
MyInterface a = (MyInterface) obj; 
a.resolve(); 

o

((MyInterface)obj).resolve(); 

il compilatore java utilizza il tipo statico per ch eck per i metodi, quindi devi lanciare l'oggetto su un tipo che implementa la tua interfaccia o eseguire il cast sull'interfaccia stessa.

3

Basta farlo con un type cast:

((MyInterface) object).resolve(); 

Di solito è meglio fare un controllo per assicurarsi che questo cast è valido - in caso contrario, si otterrà un ClassCastException. Non è possibile calzare qualcosa che non implementa MyInterface in un oggetto MyInterface. Il modo in cui fai questo controllo è con l'operatore instanceof:

if (object instanceof MyInterface) { 
    // cast it! 
} 
else { 
    // don't cast it! 
} 
Problemi correlati