Как объявить метод интерфейса, если у меня уже есть реализация с универсальным - PullRequest
0 голосов
/ 17 октября 2018

Я хочу сделать класс EventsRepository для реализации интерфейса.Таким образом, у него есть некоторый метод:

public class EventsRepository implements IModelLayer {
 ...   
    public void getEvents(ICallback<EventBrite> resultEvents) {
        WebEventsDataSource.getInstance().getEvents(resultEvents);
    }
}

, и этот метод должен реализовывать некоторый интерфейс.На основе этого метода, какую семантику метода интерфейса я должен объявить?Я пытался объявить следующий интерфейс:

public interface IModelLayer<T> {
    void getEvents(T resultEvents);
}

, но это не правильно.

Большое спасибо!

Ответы [ 4 ]

0 голосов
/ 17 октября 2018

Если параметр getEvents всегда равен ICallback, вы можете определить интерфейс и класс следующим образом:

public interface IModelLayer<T> {
    void getEvents(ICallback<T> resultEvents);
}

public class EventsRepository implements IModelLayer<EventBrite> {
 ...   
    public void getEvents(ICallback<EventBrite> resultEvents) {
        WebEventsDataSource.getInstance().getEvents(resultEvents);
    }
}

Конечно, определение WebEventsDataSource.getInstance().getEvents() также может повлиять на ответ.

0 голосов
/ 17 октября 2018

Обобщенная реализация и объявление будут выглядеть так:

public interface IModelLayer<T> {
    void getEvents(T resultEvents);
}

Интерфейс уже определен правильно, только его реализация должна быть изменена.

Реализация класса:

public class EventsRepository implements IModelLayer<ICallBack<EventBrite>> { //Generic type definition
...   
    @Override
    public void getEvents(ICallback<EventBrite> resultEvents) {
        WebEventsDataSource.getInstance().getEvents(resultEvents);
    }
}

Например, в других случаях:

public class StringRepository implements IModelLayer<ICallBack<String>> { //Generic type definition
...   
    @Override
    public void getEvents(ICallback<String> resultEvents) {
        //todo do something with the callback stuff.
    }
}

Дело в том, что вы не определили универсальный тип, который хотите использовать.Таким образом, вы меняете implements IModelLayer на implements ModelLayer<YourType>, и метод будет использовать определенный вами тип.

0 голосов
/ 17 октября 2018

Вы почти там, вы забыли тип, попробуйте с:

public class EventsRepository implements IModelLayer<ICallback<EventBrite>>{
    @Override
    public void getEvents(ICallback<EventBrite> resultEvents) {
            WebEventsDataSource.getInstance().getEvents(resultEvents);
    }
}
0 голосов
/ 17 октября 2018

орудия, как показано ниже ... это может помочь

      public class EventsRepository implements IModelLayer<ICallback<EventBrite>> {
        public void getEvents(ICallback<EventBrite> resultEvents) {
           WebEventsDataSource.getInstance().getEvents(resultEvents);
       }
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...