首页 课程 师资 教程 报名

2019年Java泛型用法总结

  • 2019-10-22 14:34:25
  • 1906次 动力节点



  为什么使用泛型?


  Java编译器在编译时加强泛型代码的类型检查,避免运行时不可预料的错误。


  泛型支持程序化类型作为参数,使方法兼具灵活性。


  泛型能让你实现泛型算法,更具有通用性。


  泛型类型和方法


  泛型类型


  参数化类型的类或接口。


  格式:classname<T1,T2,...,Tn>{/*...*/},其中T1,T2称为typeparameters。


  调用泛型类型(又称为参数化类型):Box<Integer>integerBox,传入具体的类型。


  实例化泛型类型:Box<Integer>integerBox=newBox<Integer>();


  泛型方法


  参数化类型的方法。


  格式:publicstatic<K,V>booleancompare(Pair<K,V>p1,Pair<K,V>p2),static,non-static均可。


  调用泛型方法:Util.<Integer,String>compare(p1,p2)。可以利用类型推断,像调用普通方法一样调用泛型方法,如:Util.compare(p1,p2)


  通过extends来限定泛型类型和方法的边界


  通配符和子类型


  Integer是Number的子类,但参数化类型Box<Integer>和Box<Number>没有关系,他们的共同父类是Object。

image.png

  泛型类型之间几乎没有关系,但可以通过通配符在泛型类型之间建立关系。


image.png

  ?通配符,用于参数、字段、局部变量的类型,不用于泛型类型和方法。


  上界:List<?extendsNumber>,不确定类型是指定类型或指定类型的子类,可以放松对变量的限制,如匹配List<Number>,List<Integer>。例如,List<Number>仅匹配Number类型的List,而List<?extendsNumber>匹配Number类型和其子类的List。


  无界:List<?>,不确定类型的List。使用场景:1)List的元素都是Object类型,直接可以使用Object的方法。2)泛型类中的方法不依赖于类型参数。


  下界:List<?superInteger>,不确定类型是指定类型或指定类型的父类,可以尽量提高灵活性,如匹配List<Integer>,List<Number>,List<Object>。


  通配符使用的场景


  把参数变量看作两类:


  1、『in』提供给方法内部使用,即传入数据。


  2、『out』提供给方法外部使用,即传出数据。


  利用WildcardCapture特性,通配符使用的场景为:


  1、『in』使用上界通配符


  2、『out』使用下界通配符


  3、『in』可以使用Object的方法,使用无界通配符


  4、即用作『in』,又用作『out』的,不使用通配符


  泛型的限制


  不能用primitive类型实例化泛型。如:Pair<int,char>p=newPair<>(8,'a');


  不能实例化参数类型。如:newE();


  不能定义类的静态类型字段是参数类型。如:privatestaticTos;


  参数类型不能使用instanceof和类型转换。如:listinstanceofArrayList<Integer>


  不能创建参数化类型数组。如:List<Integer>[]arrayOfLists=newList<Integer>[2];


  不能Create,Catch,或者Throw参数化类型对象。如:classMathException<T>extendsException{/*...*/}


  重载方法不能使用参数化类型被擦除后拥有同样的原生类型。如:


  publicvoidprint(Set<String>strSet){}


  publicvoidprint(Set<Integer>intSet){}


  被编译擦除后是一样的publicvoidprint(SetstrSet){}


  以上就是动力节点java培训机构小编介绍的“2019年Java泛型用法总结”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。


  相关内容


  java泛型方法的使用


  完整的Java软件开发学习路线


  Java泛型定义与java用法泛型实例详解


选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交