Java如何獲取泛型的實際類型?

有人問如下狀況如何獲得泛型參數的實際類型:api

APIService api = new APIService<User>();

因爲Java的類型擦除,沒有辦法獲取,APIService不知道它被賦予了User。code

但能夠變通一下:class

APIService api = APIService.create(User.class);

對應的類定義是:泛型

public class APIService<T> {
  public static <U> APIService<U> create(Class<U> cls) {
    return new APIService<U>(cls);
  }

  public APIService(Class<T> cls) {
    //這裏知道了實際類型cls
  }
}

Kotlin, Scala等基於JVM的語言具備reified generics,能方便地獲取實際類型。static

相關文章
相關標籤/搜索