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

相关文章
相关标签/搜索