JAVA泛型_JSON

因为Java泛型的擦除并不是对所有使用泛型的地方都会擦除的,部分地方会保留泛型信息。


最典型的地方就是一个非泛型类可以继承一个泛型基类,例如:

public class Base<T> { }
public class Derived extends Base<String> { }

此例中Base是泛型类,有一个未绑定的泛型类型变量T。
而Derived是非泛型类,并没有任何未绑定的泛型变量;它所继承的不是Base<T>,而是将T绑定为String的Base<String>。
于是,对Derived.class调用getGenericSuperclass(),就可以进一步获取到T所绑定的String类型。
但上面的例子里,如果我们只是要知道String的话,何不直接找个地方记录下String.class呢?
用非泛型类继承泛型类还能做什么事情?
试想,如果我们想在Java程序里用一个变量记录下 Map<String, List<String>> 这样的类型信息,我们可以怎么做?


或许有人会觉得可以这样:

Class<?> c = Map<String, List<String>>.class;
然而这并不符合Java语法,所以不能这样写。
但我们可以这样写:
Type t = new Base<Map<String, List<String>>>() {
         }.getClass().getGenericSuperclass();
Type targ = ((ParameterizedType) t).getActualTypeArguments()[0];


其中Type是java.lang.reflect.Type。这样我们得到的targ表示的就是:

java.util.Map<java.lang.String, java.util.List<java.lang.String>>


是否推荐在项目中使用这些方法?

Gson的TypeToken





猜你喜欢

转载自blog.csdn.net/kingdam578/article/details/78662475