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

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

APIService api = new APIService();

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

但可以变通一下:

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

对应的类定义是:

public class APIService {
  public static  APIService create(Class cls) {
    return new APIService(cls);
  }

  public APIService(Class cls) {
    //这里知道了实际类型cls
  }
}

Kotlin, Scala等基于JVM的语言具有reified generics,能方便地获取实际类型。

你可能感兴趣的:(java)