java - una - ¿Cómo hago un método para aceptar instancias con dos interfaces?
llamar un objeto desde otra clase java (1)
Esta pregunta ya tiene una respuesta aquí:
Tengo un par de interfaces:
public interface Speaker {
void speak();
}
public inteface Walker {
void walk();
}
Quiero un método que tome instancias que sean tanto un Speaker
como un Walker
.
Ahora, podría implementar otra interfaz:
public interface WalkerSpeaker extends Walker, Speaker {
}
Y acepta que:
void walkAndTalk(final WalkerSpeaker x) {
x.walk();
x.speak();
}
¡Pero esto es bastante engorroso con muchas combinaciones, y cada implementación debe heredarse de WalkerSpeaker
para que funcione!
¿Hay alguna manera mejor?
Puedes lograr esto con los genéricos de la siguiente manera
public <T extends Speaker & Walker> void walkAndTalk(T x) {
x.walk();
x.speak();
}
El parámetro de tipo T
estará "doblemente vinculado" a ambas interfaces, por lo que en esencia T
será un WalkerSpeaker
excepto que no tiene que escribir una interfaz separada para él.