| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| public abstract class A<T extends A< |
| T, |
| S>, S extends List< |
| ?>> { |
| |
| T t; |
| S s; |
| A< |
| T, |
| S> a; |
| |
| Object field = a.<T, S>getMap(t, s); |
| |
| public A() { |
| <T, S>this(null, null); |
| } |
| |
| public <M, N> A(M param1, N param2) { |
| |
| } |
| |
| public <M, N> Map< |
| M, |
| N> getMap(M key, N value) { |
| return null; |
| } |
| |
| } |
| |
| class B extends A< |
| B, |
| List< |
| String>> { |
| |
| public <M, N> B(M param1, N param2) { |
| <M, N>super(param1, param2); |
| } |
| |
| public <M, N> Map< |
| M, |
| N> getMap(M key, N value) { |
| B b = new <M, N>B(key, value); |
| AMethod method = b::<String, String>getMap; |
| AMethod method2 = super::<String, String>getMap; |
| AMethod method3 = AMap< |
| M>::<String, String>new; |
| AMethod method4 = AMap< |
| M>::<String, String>createAMap; |
| return super.<M, N>getMap(key, value); |
| } |
| } |
| |
| interface AMethod { |
| Map< |
| String, |
| String> getMap(String key, String value); |
| } |
| |
| class AMap<T> extends HashMap< |
| String, |
| String> { |
| public <M, N> AMap(String param1, String param2) { |
| |
| } |
| |
| public static <M, N> AMap< |
| M> createAMap(String param1, String param2) { |
| return new AMap<>(param1, param2); |
| } |
| } |