有人問如下狀況如何獲得泛型參數的實際類型: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