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==