/* package whatever; // don't place package name! */
import java.lang.reflect.ParameterizedType;
/* Name of the class has to be "Main" only if the class is public. */
abstract class BaseDao<T> {
@SuppressWarnings("unchecked")
protected Class<T> getClazz() {
final ParameterizedType type = (ParameterizedType) this.getClass()
.getGenericSuperclass();
Class<T> clazz = (Class<T>) type.getActualTypeArguments()[0];
return clazz;
}
BaseDao<String> daoString = new BaseDao<String>() {};
System.
out.
println(daoString.
getClazz().
getSimpleName()); BaseDao<Long> daoLong = new BaseDao<Long>() {};
System.
out.
println(daoLong.
getClazz().
getSimpleName()); }
}
Ci8qIHBhY2thZ2Ugd2hhdGV2ZXI7IC8vIGRvbid0IHBsYWNlIHBhY2thZ2UgbmFtZSEgKi8KCmltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5QYXJhbWV0ZXJpemVkVHlwZTsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwphYnN0cmFjdCBjbGFzcyBCYXNlRGFvPFQ+IHsKCglAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKCXByb3RlY3RlZCBDbGFzczxUPiBnZXRDbGF6eigpIHsKCgkJZmluYWwgUGFyYW1ldGVyaXplZFR5cGUgdHlwZSA9IChQYXJhbWV0ZXJpemVkVHlwZSkgdGhpcy5nZXRDbGFzcygpCgkJCQkuZ2V0R2VuZXJpY1N1cGVyY2xhc3MoKTsKCQlDbGFzczxUPiBjbGF6eiA9IChDbGFzczxUPikgdHlwZS5nZXRBY3R1YWxUeXBlQXJndW1lbnRzKClbMF07CgkJcmV0dXJuIGNsYXp6OwoJfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uIHsKCgkJQmFzZURhbzxTdHJpbmc+IGRhb1N0cmluZyA9IG5ldyBCYXNlRGFvPFN0cmluZz4oKSB7fTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oZGFvU3RyaW5nLmdldENsYXp6KCkuZ2V0U2ltcGxlTmFtZSgpKTsKCQlCYXNlRGFvPExvbmc+IGRhb0xvbmcgPSBuZXcgQmFzZURhbzxMb25nPigpIHt9OwoJCVN5c3RlbS5vdXQucHJpbnRsbihkYW9Mb25nLmdldENsYXp6KCkuZ2V0U2ltcGxlTmFtZSgpKTsKCX0KCn0K