Java множественное наследование с использованием двух интерфейсов, имеющих одинаковый метод, но разные параметры - PullRequest
0 голосов
/ 28 апреля 2020

Когда я попытался сделать Controller таким образом, я получил сообщение: Слушатель не может наследоваться с разными аргументами AlfaMsg и GammaMsg. Я читаю некоторые шаблоны, но это мне не помогает. Как я могу реализовать эту идею?

public abstract class Msg {

}   

public class AlfaMsg extends Msg{


}

public class GammaMsg extends Msg{


}

public interface Listener<T extends Msg> {
   void update(String message, T msg);    
}

public interface ListenerAlfa  extends Listener<AlfaMsg> {
   @Override    
   void update(String message, AlfaMsg deviceMessage);    
}

public interface ListenerGamma  extends Listener<GammaMsg> {
   @Override    
   void update(String message, GammaMsg deviceMessage);    
}

public class Controller implements ListenerAlfa, ListenerGamma{

    @Override
    void update(String message, AlfaMsg deviceMessage){

    }

    @Override
    void update(String message, GammaMsg deviceMessage){

    }
}

1 Ответ

1 голос
/ 29 апреля 2020

К сожалению, вы не можете сделать это с помощью обобщений из-за стирания типа - так что Controller будет реализовывать один и тот же интерфейс Listener дважды.

Возможно, вы захотите просмотреть предыдущий ответ к аналогичному вопросу у него есть обходной путь, использующий инкапсуляцию, но я не уверен, что это то, что вы хотели бы реализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...