/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.lang.reflect.*;
public class Main {
System.
out.
println("Processing " + name
); Type[] ifs = x.getClass().getGenericInterfaces();
System.
out.
println(ifs.
length); for (Type c : ifs) {
Type[] tps = ((ParameterizedType)c).getActualTypeArguments();
System.
out.
println("===="+tp
); }
}
}
{
MyInterface<? extends Number> x = new DoubleImpl();
MyInterface<? extends Number> y = new IntImpl();
MyInterface<? extends Number> z = new FloatImpl();
doit(x, "double");
doit(y, "int");
doit(z, "float");
}
}
interface MyInterface<T extends Number> {
T getVal();
}
class DoubleImpl implements MyInterface<Double> {
public Double getVal
() {return 42.42; } }
class IntImpl implements MyInterface<Integer> {
public Integer getVal
() {return 42; } }
class FloatImpl implements MyInterface<Float> {
public Float getVal
() {return 42.24F
; } }
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC4qOwoKcHVibGljIGNsYXNzIE1haW4gewoJCglwcml2YXRlIHN0YXRpYyB2b2lkIGRvaXQoT2JqZWN0IHgsIFN0cmluZyBuYW1lKSB7CgkJU3lzdGVtLm91dC5wcmludGxuKCJQcm9jZXNzaW5nICIgKyBuYW1lKTsKCQlUeXBlW10gaWZzID0geC5nZXRDbGFzcygpLmdldEdlbmVyaWNJbnRlcmZhY2VzKCk7CgkJU3lzdGVtLm91dC5wcmludGxuKGlmcy5sZW5ndGgpOwoJCWZvciAoVHlwZSBjIDogaWZzKSB7CgkJCVN5c3RlbS5vdXQucHJpbnRsbihjKTsKCQkJVHlwZVtdIHRwcyA9ICgoUGFyYW1ldGVyaXplZFR5cGUpYykuZ2V0QWN0dWFsVHlwZUFyZ3VtZW50cygpOwoJCQlmb3IgKE9iamVjdCB0cCA6IHRwcykgewoJCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09Iit0cCk7CgkJCX0KCQl9Cgl9CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCQoJCU15SW50ZXJmYWNlPD8gZXh0ZW5kcyBOdW1iZXI+IHggPSBuZXcgRG91YmxlSW1wbCgpOwoJCU15SW50ZXJmYWNlPD8gZXh0ZW5kcyBOdW1iZXI+IHkgPSBuZXcgSW50SW1wbCgpOwoJCU15SW50ZXJmYWNlPD8gZXh0ZW5kcyBOdW1iZXI+IHogPSBuZXcgRmxvYXRJbXBsKCk7CgkJZG9pdCh4LCAiZG91YmxlIik7CgkJZG9pdCh5LCAiaW50Iik7CgkJZG9pdCh6LCAiZmxvYXQiKTsKCX0KfQoKaW50ZXJmYWNlIE15SW50ZXJmYWNlPFQgZXh0ZW5kcyBOdW1iZXI+IHsKCVQgZ2V0VmFsKCk7Cn0KCmNsYXNzIERvdWJsZUltcGwgaW1wbGVtZW50cyBNeUludGVyZmFjZTxEb3VibGU+IHsKCXB1YmxpYyBEb3VibGUgZ2V0VmFsKCkge3JldHVybiA0Mi40MjsgfQp9CmNsYXNzIEludEltcGwgaW1wbGVtZW50cyBNeUludGVyZmFjZTxJbnRlZ2VyPiB7CglwdWJsaWMgSW50ZWdlciBnZXRWYWwoKSB7cmV0dXJuIDQyOyB9Cn0KY2xhc3MgRmxvYXRJbXBsIGltcGxlbWVudHMgTXlJbnRlcmZhY2U8RmxvYXQ+IHsKCXB1YmxpYyBGbG9hdCBnZXRWYWwoKSB7cmV0dXJuIDQyLjI0RjsgfQp9Cg==