java泛型中的PECS原则
2021/5/3 1:25:16
本文主要是介绍java泛型中的PECS原则,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java泛型中的PECS原则是什么呢?这里的PECS全称是Producer extends Consumer super 顾名思义就是生产者继承消费者超级
- 如下有个实体类,我们需要对它进行操作,探讨PECS
public class Student<T,K> { private T name; private K age; public Student(T name, K age) { this.name = name; this.age = age; } public T getName() { return name; } public void setName(T name) { this.name = name; } public K getAge() { return age; } public void setAge(K age) { this.age = age; } }
当我们在mangerAge方法中使用extends通配符时,此时的getAge方法可以接收满足? extends Number的对象,但必须用Number来接收,因为程序并不知道你传入的时Double还是Integer。当你想SetAge写入值时,是不允许的,例如在此程序中,你在student.setAge(new Double())传入一个Double类型的参数,Integer显然是无法接收的,只能传入一个null,但会报空指针异常。
public class StudentManager { public static void mangerAge(Student<String, ? extends Number> student){ // public ? extends Number getAge() // 我们需要用Number来接收student.getAge(), // 因为程序不知道你传入的是Integer还是Double,所以要用Number来接收 System.out.println(student.getAge()); // 如果传入的mangerAge方法中Student的参数是<String,Double>, // 你在setAge中传入<String,Integer>能满足Student<String, ? extends Number>,但Double不能接收Integer, // 此处只能传入null,但当你获取Age值时肯定会报空指针异常。 student.setAge(null); } public static void main(String[] args) { Student<String, Integer> s1 = new Student<>("小明", 13); mangerAge(s1); } }
super通配符,当你想写入一个值,只要满足super通配符的要求即可,当你想接收一个值时是不允许的(Object)除外,因为程序并不知道你要传入的类型是哪个
public class StudentManager { public static void mangerAge(Student<String, ? super Integer> student){ // void setAge(? super Integer age) student.setAge(new Integer(18)); System.out.println(student.getAge()); // 18 } public static void main(String[] args) { Student<String, Number> s2 = new Student<>("小明", 13); mangerAge(s2); } }
总结:PECS:Producer extends获取值,使用extends通配符时,能接收(读取)值,不能写入(null除外);Consumer super 写入,消费者使用super通配符时,不能接收(读取)值(Object接收除外),能写入。
这篇关于java泛型中的PECS原则的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-25初学者必备:订单系统资料详解与实操教程
- 2024-12-24内网穿透资料入门教程
- 2024-12-24微服务资料入门指南
- 2024-12-24微信支付系统资料入门教程
- 2024-12-24微信支付资料详解:新手入门指南
- 2024-12-24Hbase资料:新手入门教程
- 2024-12-24Java部署资料
- 2024-12-24Java订单系统资料:新手入门教程
- 2024-12-24Java分布式资料入门教程
- 2024-12-24Java监控系统资料详解与入门教程