import java.util.* ;
import java.lang.reflect.* ;
class Example {
public static void main
( String [ ] args
) { {
ArrayList< Long> al = new ArrayList< Long> ( ) ;
printTypeInfo( "ArrayList<Long> al = new ArrayList<Long>();" , al) ;
}
{
ArrayList< Long> al = new ArrayList< Long> ( ) { } ;
printTypeInfo( "ArrayList<Long> al = new ArrayList<Long>() {};" , al) ;
}
}
private static void printTypeInfo
( String declaration, ArrayList
< Long
> al
) { System .
out .
println ( declaration
) ;
printTypeInfo( "al.getClass()" ,
al.getClass ( ) ) ;
printTypeInfo( "al.getClass().getGenericSuperclass()" ,
al.getClass ( ) .getGenericSuperclass ( ) ) ;
Type actualTypeArgument =
( ( ParameterizedType)
al.getClass ( )
.getGenericSuperclass ( ) )
.getActualTypeArguments ( ) [ 0 ] ;
printTypeInfo( "al.getClass().getGenericSuperclass().getActualTypeArguments()[0]" ,
actualTypeArgument) ;
}
private static void printTypeInfo
( String expr, Type t
) { System .
out .
printf ( " %s%n" , expr
) ; System .
out .
printf ( " is an instance of '%s'%n" , t.
getClass ( ) .
getSimpleName ( ) ) ; System .
out .
printf ( " representing the type '%s'" , t.
getTypeName ( ) ) ;
if ( t instanceof Class<?> && ( ( Class<?> ) t) .isAnonymousClass ( ) ) {
System .
out .
printf ( " (anonymous subclass of %s)%n" ,
( ( Class
<?> ) t
) .
getSuperclass ( ) .
getName ( ) ) ; } else {
}
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuKjsKCmNsYXNzIEV4YW1wbGUgewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIHsKICAgICAgICAgICAgQXJyYXlMaXN0PExvbmc+IGFsID0gbmV3IEFycmF5TGlzdDxMb25nPigpOwogICAgICAgICAgICBwcmludFR5cGVJbmZvKCJBcnJheUxpc3Q8TG9uZz4gYWwgPSBuZXcgQXJyYXlMaXN0PExvbmc+KCk7IiwgYWwpOwogICAgICAgIH0KICAgICAgICB7CiAgICAgICAgICAgIEFycmF5TGlzdDxMb25nPiBhbCA9IG5ldyBBcnJheUxpc3Q8TG9uZz4oKSB7fTsKICAgICAgICAgICAgcHJpbnRUeXBlSW5mbygiQXJyYXlMaXN0PExvbmc+IGFsID0gbmV3IEFycmF5TGlzdDxMb25nPigpIHt9OyIsIGFsKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRUeXBlSW5mbyhTdHJpbmcgZGVjbGFyYXRpb24sIEFycmF5TGlzdDxMb25nPiBhbCkgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihkZWNsYXJhdGlvbik7CiAgICAgICAgCiAgICAgICAgcHJpbnRUeXBlSW5mbygiYWwuZ2V0Q2xhc3MoKSIsCiAgICAgICAgICAgICAgICAgICAgICAgYWwuZ2V0Q2xhc3MoKSk7CiAgICAgICAgcHJpbnRUeXBlSW5mbygiYWwuZ2V0Q2xhc3MoKS5nZXRHZW5lcmljU3VwZXJjbGFzcygpIiwKICAgICAgICAgICAgICAgICAgICAgICBhbC5nZXRDbGFzcygpLmdldEdlbmVyaWNTdXBlcmNsYXNzKCkpOwogICAgICAgIAogICAgICAgIFR5cGUgYWN0dWFsVHlwZUFyZ3VtZW50ID0KICAgICAgICAgICAgKChQYXJhbWV0ZXJpemVkVHlwZSkKICAgICAgICAgICAgICAgIGFsLmdldENsYXNzKCkKICAgICAgICAgICAgICAgICAgLmdldEdlbmVyaWNTdXBlcmNsYXNzKCkpCiAgICAgICAgICAgICAgICAgIC5nZXRBY3R1YWxUeXBlQXJndW1lbnRzKCkgWzBdOwogICAgICAgIHByaW50VHlwZUluZm8oImFsLmdldENsYXNzKCkuZ2V0R2VuZXJpY1N1cGVyY2xhc3MoKS5nZXRBY3R1YWxUeXBlQXJndW1lbnRzKClbMF0iLAogICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbFR5cGVBcmd1bWVudCk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRUeXBlSW5mbyhTdHJpbmcgZXhwciwgVHlwZSB0KSB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIiAgJXMlbiIsIGV4cHIpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRmKCIgICAgaXMgYW4gaW5zdGFuY2Ugb2YgJyVzJyVuIiwgdC5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIiAgICByZXByZXNlbnRpbmcgdGhlIHR5cGUgJyVzJyIsIHQuZ2V0VHlwZU5hbWUoKSk7CiAgICAgICAgCiAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBDbGFzczw/PiAmJiAoKENsYXNzPD8+KSB0KS5pc0Fub255bW91c0NsYXNzKCkpIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIiAoYW5vbnltb3VzIHN1YmNsYXNzIG9mICVzKSVuIiwgKChDbGFzczw/PikgdCkuZ2V0U3VwZXJjbGFzcygpLmdldE5hbWUoKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICAgICAgfQogICAgfQp9