Kiba518

Kiba518

三线城市架构师一枚。

Fork me on GitHub

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();
}

实际应用:用Gson反序列化一个字符串,传入一个要反序列化的类的类型,再传入字符串,然后在返回泛型T的对象。

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。

----------------------------------------------------------------------------------------------------

注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的推荐】,非常感谢!

 

 

posted @ 2021-09-07 14:10  kiba518  阅读(1686)  评论(0编辑  收藏  举报