Java泛型详解
泛型类
Java的泛型类比较好理解,和C#的一样,在类后面加<T>。
public class KFanXing<T> {
public T kiba;
public KFanXing(T obj){
kiba=obj;
}
public T getkiba(){
return kiba;
}
}
调用:
KFanXing<String> kFanXing =new KFanXing<>("user");
kFanXing.getkiba();
只要定义了泛型类,那么在类里都可以随时使用T这个类,比如可以作为参数也可以作为返回值。
注意:静态函数里不能使用泛型类T。
泛型函数
Java中泛型类和泛型函数可以理解为俩概念,因为他俩的写法完全不一致,这点比较奇怪,需要大家特殊记忆。
泛型函数需要在public后面加一个<T>,来标记他是个泛型函数,然后返回值可以用T也可以用常规的类,比如用String;但入参就不一样了,他有很多种情况。
情况1:传入一个泛型对象,这种情况比较简单,看上去就像是普通的函数在public后面加了一个<T>,比较好理解。
public <T> void test1(T s) {
}
public <T> T void test2(T s) {
}
调用:
test1(new Object());//传入Object类型
情况2:传入一个泛型类的类型,这里使用Class<T> tClass接收这种参数。Class类是Java的类的类型,类似C#的Type类,所以这里Class<T>,就是泛型的类型。有人会想,我前面都用<T>定义泛型方法了,直接用T获取他的类型不好吗?答案是不可以,获取不到。也正因为获取不到,所以只好把类型作为参数传入进来了(也就是说,泛型方法的第一个参数理论是必须是Class<T> tClass);的确代码有点不协调,这里大家只能死记硬背了。
public <T> String test1(Class<T> tClass) throws InstantiationException, IllegalAccessException {
T instance = tClass.newInstance();
return instance.getClass().getName();
}
public class KFanXing {
public <T> T Deserialize(Class<T> tClass, String json){
Gson gson = new Gson();
return gson.fromJson(json, tClass);
}
}
PS1:ctrl+o可以显示可以被@Override重载的方法。
PS2:fragment里使用this.getActivity()可以获取到当前的Activity。
java解析泛型
使用hutool的jsonUtil,利用TypeReference生成类型参数。
List<List<String>> urlList = JSONUtil.toBean(record.getStr(), new TypeReference<List<List<String>>>() {
}, true);
----------------------------------------------------------------------------------------------------
注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!


浙公网安备 33010602011771号