class Example<E> {
public static void main
(String[] args
) { try {
Example<String> e = new Example<String>();
// type is actually Object.class!
Class<String> type = e.getGenericType();
System.
out.
println("type is " + type.
getName());
// throws ClassCastException
String s
= type.
newInstance();
e.
printStackTrace(System.
out); }
}
Class<E> getGenericType() {
return Example.<E>getClazz();
}
static <T> Class<T> getClazz(T... param) {
return (Class<T>) param.getClass().getComponentType();
}
}
Y2xhc3MgRXhhbXBsZTxFPiB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgRXhhbXBsZTxTdHJpbmc+IGUgPSBuZXcgRXhhbXBsZTxTdHJpbmc+KCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyB0eXBlIGlzIGFjdHVhbGx5IE9iamVjdC5jbGFzcyEKICAgICAgICAgICAgQ2xhc3M8U3RyaW5nPiB0eXBlID0gZS5nZXRHZW5lcmljVHlwZSgpOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInR5cGUgaXMgIiArIHR5cGUuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIHRocm93cyBDbGFzc0Nhc3RFeGNlcHRpb24KICAgICAgICAgICAgU3RyaW5nIHMgPSB0eXBlLm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgIAogICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIGUpIHsKICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBDbGFzczxFPiBnZXRHZW5lcmljVHlwZSgpIHsKICAgICAgICByZXR1cm4gRXhhbXBsZS48RT5nZXRDbGF6eigpOwogICAgfQogICAgCiAgICBzdGF0aWMgPFQ+IENsYXNzPFQ+IGdldENsYXp6KFQuLi4gcGFyYW0pIHsKICAgICAgICByZXR1cm4gKENsYXNzPFQ+KSBwYXJhbS5nZXRDbGFzcygpLmdldENvbXBvbmVudFR5cGUoKTsKICAgIH0KfQ==