| interface I{ |
| <T extends Iterable<String>> void foo(); |
| } |
| |
| abstract class A<S> implements I { |
| public abstract <T extends Iterable<String>> void foo(); |
| <T extends A> void bar(T x){ |
| A a = null; |
| a.<Iterable<String>> foo(); |
| x.<Iterable<String>> foo(); |
| } |
| } |
| |
| abstract class B<S> { |
| public abstract <T extends Iterable<String>> void foo(); |
| <T extends B> void bar(T x){ |
| B a = null; |
| a.<Iterable<String>> foo(); |
| x.<Iterable<String>> foo(); |
| } |
| } |
| |
| abstract class C<S> { |
| public abstract <T extends Iterable<String>> void foo(); |
| <T extends C & I> void bar(T x){ |
| x.<Iterable<String>> foo(); |
| } |
| } |
| |
| //--------------------------------------------------------------- |
| interface I1 { |
| void foo(); |
| } |
| |
| |
| abstract class B1<S> { |
| public abstract <T extends Iterable<String>> void foo(); |
| <T extends B1 & I1> void bar(T x){ |
| B1 a = null; |
| a.<Iterable<String>> foo(); |
| x.<Iterable<String>> foo(); |
| } |
| } |