Java generic interface and java generic interface
Recently, a third-party class library has encountered a wildcard problem. I was a little confused, so I recorded it
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>
Above, compilation Error
The problem is that public interface TaskQueryApi <T extends OrderFlow> extends QueryApi <TaskQueryApi <?>, T> this sentence.
Change
Public interface TaskQueryApi <T extends OrderFlow> extends QueryApi <QueryApiImpl <?>, T> then it is normal.
Cause Analysis: TaskQueryApi implements QueryApi. The first generic parameter is TaskQueryApi.
QueryApiImpl also implements QueryApi. The first generic parameter is QueryApiImpl.
Therefore, when TaskQueryApiImpl implements TaskQueryApi, it also integrates QueryApiImpl. In this way, there are two upstream generic parameters, but the generic instance types are not the same, resulting in an error.
Of course, TaskQueryApi does not integrate QueryApi. In this way, there is a QueryApi method in the implementation class, but there is no interface definition.