在学习泛型中遇到的多态的一个小问题
来源:互联网 发布:英国 实力 知乎 编辑:程序博客网 时间:2024/06/05 20:18
在学习泛型的过程中,我需要创建person、worker、student 一个父类两个子类,但是在创建过程遇到一些问题,先上代码
package cn.haiyisoft.domain;public class PersonForGeneric implements Comparable<PersonForGeneric> {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;PersonForGeneric other = (PersonForGeneric) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}public PersonForGeneric(String name, int age) {super();this.name = name;this.age = age;}public PersonForGeneric() {super();}@Overridepublic int compareTo(PersonForGeneric o) {// TODO Auto-generated method stubif (this.getName().equals(o.getName()))return this.getAge() - o.getAge();elsereturn this.getName().compareTo(o.getName());}}
package cn.haiyisoft.domain;public class WorkerForGeneric extends PersonForGeneric {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public WorkerForGeneric(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic int hashCode() {final int prime = 31;int result = super.hashCode();result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (!super.equals(obj))return false;if (getClass() != obj.getClass())return false;WorkerForGeneric other = (WorkerForGeneric) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}@Overridepublic String toString() {return "WorkerForGeneric [name=" + name + ", age=" + age + "]";}}
package cn.haiyisoft.domain;public class StudentForGeneric extends PersonForGeneric {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;StudentForGeneric other = (StudentForGeneric) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}public StudentForGeneric(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "StudentForGeneric [name=" + name + ", age=" + age + "]";}}
正常来讲compareto方法里面应该是这样的
public int compareTo(PersonForGeneric o) {// TODO Auto-generated method stubif (this.name.equals(o.name))return this.age - o.age;elsereturn this.name.compareTo(o.name);}
但是如果在treeset中传入子类,那么就会使得this.name等指向了父类的name,但是父类的name是没有被赋值的(成员变量没有多态)最后运行时会报空指针,如果一定要坚持的话,那么compareto方法要改成这样
public int compareTo(PersonForGeneric o) {// TODO Auto-generated method stubif (this.getName().equals(o.getName()))return this.getAge() - o.getAge();elsereturn this.getName().compareTo(o.getName());}
阅读全文
0 0
- 在学习泛型中遇到的多态的一个小问题
- 遇到的一个小问题
- 在CSS中遇到的一个小问题
- 关于NavigationView在使用中遇到的一个小问题
- C++学习中关于cout遇到的一个小问题
- 一个学习QT中遇到的小问题
- 学习Scala override时遇到的一个小问题
- 学C++遇到的一个小问题
- 遇到一个主明细表的小问题。
- 安装Windows7遇到的一个小问题
- WPF遇到的一个小问题
- Java遇到的一个小问题
- android开发遇到的一个小问题
- android 遇到的一个小问题
- myeclipse2013激活遇到的一个小问题
- 初学python遇到的一个小问题
- 写struts2遇到的一个小问题
- RowBounds遇到的一个小问题
- 使用Spring实现Mysql的读写分离
- JavaScript中的DOM简介及应用
- 贝叶斯思维——chapter5(胜率和加数)
- 072day(输出前k大的数的尝试)
- JDBC-java与数据库的连接
- 在学习泛型中遇到的多态的一个小问题
- springMVC笔记系列(5)——@RequestMapping请求value的通配符详解
- 表单提交中get和post方式的区别
- 如何在tomcat里为多个应用配置不同的访问端口
- java反射机制判断对象所有属性是否全部为空
- http常见状态码以及其代表的含义
- 操作系统学习指南(一)
- Android热修复(一):Tinker的使用(一)命令行接入
- mybatis批量update(mysql)