如果我已经有了泛型

时间:2018-10-17 09:22:40

标签: java generics interface

我想使EventsRepository类实现一个Interface。 所以它有一些方法:

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 :(得分:2)

通用实现和声明如下:

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>,该方法将使用您定义的类型。

答案 1 :(得分:2)

您快到了,您忘记了类型,请尝试:

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

答案 2 :(得分:1)

如下所示的实现方式。这可能有帮助

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

答案 3 :(得分:1)

如果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()的定义也可能会影响答案。