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。
----------------------------------------------------------------------------------------------------
注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!
https://www.cnblogs.com/kiba/