首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 反射獲取繼承工具類的泛型實際類型參數

     編輯:程式設計綜合問答

場景

基類 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>,則無法在運行時獲取具體類型(類型擦除)。
  • Spring 等框架常用此技巧實現通用 DAO/Service。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved