为什么使用泛型?
Java编译器在编译时加强泛型代码的类型检查,避免运行时不可预料的错误。
泛型支持程序化类型作为参数,使方法兼具灵活性。
泛型能让你实现泛型算法,更具有通用性。
泛型类型和方法
泛型类型
参数化类型的类或接口。
格式:classname
调用泛型类型(又称为参数化类型):Box
实例化泛型类型:Box
泛型方法
参数化类型的方法。
格式:publicstatic
调用泛型方法:Util.
通过extends来限定泛型类型和方法的边界
通配符和子类型
Integer是Number的子类,但参数化类型Box
泛型类型之间几乎没有关系,但可以通过通配符在泛型类型之间建立关系。
?通配符,用于参数、字段、局部变量的类型,不用于泛型类型和方法。
上界:List,不确定类型是指定类型或指定类型的子类,可以放松对变量的限制,如匹配List
无界:List,不确定类型的List。使用场景:1)List的元素都是Object类型,直接可以使用Object的方法。2)泛型类中的方法不依赖于类型参数。
下界:List,不确定类型是指定类型或指定类型的父类,可以尽量提高灵活性,如匹配List
通配符使用的场景
把参数变量看作两类:
1、『in』提供给方法内部使用,即传入数据。
2、『out』提供给方法外部使用,即传出数据。
利用WildcardCapture特性,通配符使用的场景为:
1、『in』使用上界通配符
2、『out』使用下界通配符
3、『in』可以使用Object的方法,使用无界通配符
4、即用作『in』,又用作『out』的,不使用通配符
泛型的限制
不能用primitive类型实例化泛型。如:Pair
不能实例化参数类型。如:newE();
不能定义类的静态类型字段是参数类型。如:privatestaticTos;
参数类型不能使用instanceof和类型转换。如:listinstanceofArrayList
不能创建参数化类型数组。如:List
不能Create,Catch,或者Throw参数化类型对象。如:classMathException
重载方法不能使用参数化类型被擦除后拥有同样的原生类型。如:
publicvoidprint(Set
publicvoidprint(Set
被编译擦除后是一样的publicvoidprint(SetstrSet){}
以上就是长沙中公优就业Java培训机构小编介绍的“Java基础教程:java泛型教程”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。