Java如何获取泛型的实际类型?

原文发表于2016-08-24。

有人问以下情况如何得到泛型参数的实际类型:

APIService api = new APIService<User>();

由于Java的类型擦除,没有办法获取,APIService不知道它被赋予了User。

但可以变通一下:

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,能方便地获取实际类型。

posted @ 2020-12-25 17:42  计算法  阅读(274)  评论(0编辑  收藏  举报