本文主要是介绍我所知道的泛型 Generic,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
热身代码:
1 public static <T> void doxx(T t);2 public class GenericDao<T> {private T a; //
}
基础(可忽略)
在没有泛型之前,集合中存入的数据,类型就会丢失掉,在取出数据时,需要做强制类型转换,就有转换失败的风险,而这种风险,在编译阶段是没有办法检查出来的
引入泛型后,在定义集合的过程中可以指定集合中存储的类型,当存入非这种类型的数据时,编译时会报错.取出数据时也不需要强转 List list = new ArrayList();
ArrayList中的E称为 类型参数变量 ArrayList中的Integer称为 实际类型参数 整个称为ArrayList 泛型类型 整个ArrayList称为参数化的类型ParameterizedType
自定义泛型
分为
1 方法泛型:
public static <T> void doxx(T t);
定义在方法上的泛型就叫做方法泛型,作用的范围的当前方法内部
泛型在使用之前必须先定义,其中的字母可以是任意字母,但是通常使用大写字母
可以认为,当方法在被调用到时,虚拟机自动判断出泛型的具体类型.
2
public class GenericDao<T> {private T a; //
}
- 类上的泛型:定义在类上的泛型叫做类泛型,作用范围是整个类中都可以使用。
- 可以认为,在使用这个类时,就需要指定出泛型的具体类型.如果不明确指定,则泛型是它的上边界类型的.
- 静态方法不能使用类上定义的泛型,如果想使用泛型静态方法必须自己定义泛型
** T 拓展**
如果没有指定泛型默认可以接受任意的类型,有时希望进一步限制,此时可以使用泛型的边界:
泛型的边界:
- extends - 用来指定泛型的上边界,使用在泛型的通配符中和泛型定义中,指定具体的泛型实现必须是指定的类或其子类.
坏处是,在传入对象时,只能传入null
好处是,获取到泛型的对象时,可以调用上边界的方法. - super - 用来指定泛型的下边界,使用在泛型的通配符中,指定具体的泛型实现必须是指定类或其超类.
好处是,可以传入对象时,可以传入下边界的子孙类对象
坏处是,获取到泛型对象时,只能调用Object身上的方法
这篇关于我所知道的泛型 Generic的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!