2010-01-16 15 views
6

EDIT: Resuelto, véase más adelanteJava - Asegúrese de que un objeto implementa una interfaz

Hola,

En Java, tengo un objeto que podría ser de cualquier clase. PERO - ese objeto siempre tendrá que implementar una interfaz, por lo que cuando invoque métodos definidos por la interfaz, ese objeto contendrá ese método.

Ahora, cuando intenta llamar a un método personalizado en un objeto genérico en Java, se ensucia sobre tipeo. ¿Cómo puedo decirle de alguna manera al compilador que mi objeto implementa esa interfaz, por lo que llamar al método es correcto.

Básicamente, lo que estoy buscando es algo como esto:

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

¿Cómo se puede hacer eso en Java?

RESPUESTA: OK, si la interfaz se llama MyInterface que sólo puede poner

MyInterface obj; 
obj.resolve(); 

Lo siento por no pensar antes de publicar ....

+0

* smile * - +1 para su última observación :-) –

Respuesta

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

o

((MyInterface)obj).resolve(); 

el compilador java usa el tipo estático para ch Eck para los métodos, por lo que tiene que lanzar el objeto a un tipo que implementa su interfaz o emitir a la interfaz en sí.

3

simplemente lo haces con un type cast:

((MyInterface) object).resolve(); 

Por lo general, lo mejor es hacer una comprobación para asegurarse de que este reparto es válido - de lo contrario, obtendrá un ClassCastException. No se puede calzar nada que no implemente MyInterface en un objeto MyInterface. La forma de hacer este control es con el operador instanceof:

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