¿Cómo puedo hacer que un método acepte instancias con dos interfaces? [duplicar]


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 a la vez a Speaker y a Walker.

Ahora, podría implementar otra interfaz:

public interface WalkerSpeaker extends Walker, Speaker {

}

Y aceptar que:

void walkAndTalk(final WalkerSpeaker x) {
    x.walk();
    x.speak();
}

Pero esto es bastante engorroso con muchas combinaciones, y cada implementación debe heredar de WalkerSpeaker para que funcione!

Hay una manera mejor?

Author: sdgfsdh, 2016-06-15

1 answers

Puede lograr esto con 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 limitado" a ambas interfaces, por lo que en esencia T será un WalkerSpeaker excepto que no tiene que escribir una interfaz separada para él.

 53
Author: Kayaman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-15 13:41:38