| 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); |
| } |
| } |