有人问如下状况如何获得泛型参数的实际类型: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