如果我已经有泛型实现,如何声明接口方法

How to declare an interface method if i already have an implementation with generic

提问人:Stanly T 提问时间:10/17/2018 最后编辑:Stanly T 更新时间:10/17/2018 访问量:73

问:

我想让 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);
}

但这是不正确的。

多谢!

Java 泛型 接口

评论


答:

1赞 Pandey Amit 10/17/2018 #1

实现如下..这可能会有所帮助

      public class EventsRepository implements IModelLayer<ICallback<EventBrite>> {
        public void getEvents(ICallback<EventBrite> resultEvents) {
           WebEventsDataSource.getInstance().getEvents(resultEvents);
       }
      }
2赞 CodeMatrix 10/17/2018 #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 IModelLayerimplements ModelLayer<YourType>

2赞 Leviand 10/17/2018 #3

你快到了,你忘记了类型,试试:

public class EventsRepository implements IModelLayer<ICallback<EventBrite>>{
    @Override
    public void getEvents(ICallback<EventBrite> resultEvents) {
            WebEventsDataSource.getInstance().getEvents(resultEvents);
    }
}
1赞 Eran 10/17/2018 #4

如果 parameter 始终为 ,则可以按如下方式定义接口和类:getEventsICallback

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()