如何在具有通用参数类型的接口中实现函数?
Posted
技术标签:
【中文标题】如何在具有通用参数类型的接口中实现函数?【英文标题】:How to implement function in interface with generic argument types? 【发布时间】:2021-10-06 19:15:49 【问题描述】:public interface Page<T>
T nextPage();
它的实现
public class ConcretePageA implements Page<TypeA>
public TypeA nextPage()
// do stuff
然后我有一个接口消耗Page
public interface Source
<T> int getData(Page<T> page)
及其实现
public class ConcreteSourceA implements Source
public int getData(Page<TypeA> page) //error: getData in ConcreteSourceA ***es with getData in Source
// do stuff
我试过了,还是不行
public class ConcreteSourceA implements Source
public <TypeA> getData(Page<TypeA> page) // error: expect com.foo.TypeA but got TypeA
// do stuff
当我执行上述操作时,我得到一个编译错误提示
getData in ConcreteSourceA ***es with getData in Source
我知道我做错了什么,但是如何在仍然有多个使用不同类型的实现的同时修复它?
我是不是一开始就做错了?泛型不是解决此问题的正确方法吗?
【问题讨论】:
【参考方案1】:看起来你想让Source
像Page
一样通用,就像这样:
public interface Source<T>
int getData(Page<T> page);
然后,您可以定义仅实现某些特殊化的实现,例如
public class ConcreteSourceA implements Source<TypeA>
public int getData(Page<TypeA> page)
// do stuff
return 0;
【讨论】:
以上是关于如何在具有通用参数类型的接口中实现函数?的主要内容,如果未能解决你的问题,请参考以下文章