I have an interface Exec
public interface Exec<T, U> {
U execute(final T context);
}
Now can I have a class which implements interface Exec as below
public class BatchExec<T, U> implements Exec<List<T>, List<U>>
My doubt is Exec accepts T and U as type parameters and in this case we are passing it as List and List but BatchExec expects T and U?
As Oliver Charlesworth pointed out, the the U
and T
in the BatchExex<...>
are different than those in Exec<T, U>
. Ie if you declare BatchExec
like this:
public class BatchExec<T, U> implements Exec<List<T>, List<U>>
Then the execute method signature will contain List<T>
and List<U>
:
public List<U> execute(List<T> context)
This might be confusing so let's create an OtherbatchExec
with other type parameters:
public class OtherBatchExec<P, Q> implements Exec<List<P>, List<Q>> {
@Override
public List<Q> execute(List<P> context) {
return null;
}
}
Just to demonstrate it, you can invoke their constructor the same exact way:
Exec<List<String>, List<Integer>> exec = new BatchExec<String, Integer>();
Exec<List<String>, List<Integer>> otherExec = new OtherBatchExec<String, Integer>();
For the sake of readability, I added the type parameters to the constructor call too. You can use the diamond operator too:
Exec<List<String>, List<Integer>> exec = new BatchExec<>();
Exec<List<String>, List<Integer>> otherExec = new OtherBatchExec<>();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.