| class GenericMethodArguments { |
| |
| static class Items<T> { |
| public <Output extends T> Output apply(Transform<? super Items<T>, Output> t) { |
| return null; |
| } |
| } |
| |
| static class Transforms { |
| public static <I, O> Transform<I, O> of(DoFn<I, O> fn) { |
| return null; |
| } |
| } |
| |
| static class Transform<Input, Output> {} |
| |
| static class DoFn<Input, Output> {} |
| |
| static class MyFn1<T> extends DoFn<T, Long> {} |
| |
| static class MyFn2 extends MyFn1<Integer> {} |
| |
| private Items<Integer> items; |
| |
| public void useCase1() { |
| items.apply(Transforms.of(new MyFn2())); |
| } |
| |
| public void useCase2() { |
| items.apply(Transforms.of(new DoFn<Integer,Long>(){})); |
| } |
| |
| } |