基類 BaseUtil<T>,子類 User extends BaseUtil<User>。在 BaseUtil 運行時如何獲取具體的泛型類型 User?
public class BaseUtil<T> {
private Class<T> entityClass;
@SuppressWarnings("unchecked")
public BaseUtil() {
// 獲取子類的泛型父類類型
Type superClass = getClass().getGenericSuperclass();
if (superClass instanceof ParameterizedType) {
Type[] actualTypeArguments = ((ParameterizedType) superClass).getActualTypeArguments();
this.entityClass = (Class<T>) actualTypeArguments[0];
}
}
public Class<T> getEntityClass() { return entityClass; }
}
// 使用
public class User extends BaseUtil<User> { }
User u = new User();
System.out.println(u.getEntityClass()); // class User
extends BaseUtil<User>)。若子類也是泛型 extends BaseUtil<T>,則無法在運行時獲取具體類型(類型擦除)。