java泛型接口


最近整合一个第三方类库,遇到了泛型的问题。绕来绕去的自己有点蒙了已经,所以记录下随笔

public interface QueryApi<T extends QueryApi<?,?>,U>
public abstract class  QueryApiImpl<U> implements QueryApi<QueryApiImpl<?>,U> 

public interface TaskQueryApi<T extends OrderFlow>  extends QueryApi<TaskQueryApi<?>, T> 
public class TaskQueryApiImpl<T extends OrderFlow> extends QueryApiImpl<T> implements TaskQueryApi<T> 

以上,编译报错
问题在于public interface TaskQueryApi<T extends OrderFlow>  extends QueryApi<TaskQueryApi<?>, T>这句。
修改为
public interface TaskQueryApi<T extends OrderFlow>  extends QueryApi<QueryApiImpl<?>, T>后正常。

分析原因:TaskQueryApi实现了QueryApi,其中第一个泛型参数是TaskQueryApi
QueryApiImpl同样实现了QueryApi,其中第一个泛型参数是QueryApiImpl
所以,当TaskQueryApiImpl实现TaskQueryApi,同时集成了QueryApiImpl。这样就有两份向上的泛型参数,但是泛型的实例类型并不相同,导致报错。
当然这里TaskQueryApi也可以不集成QueryApi。这样,实现类里有QueryApi的方法,但是接口定义中就没有了。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM