[java] 更好的书写equals方法-汇率换算器的实现(4)
[java] 更好的书写equals方法-汇率换算器的实现(4)
[java] 更好的书写equals方法-汇率换算器的实现(4)
Table of Contents
1 系列文章地址
2 完美的一个equals方法应该包含的内容
- 首先判断两个对象是不是同一个对象
if (this == otherObject) return true;
- 当另一个对象为空时, 返回false
if (otherObject == null) return false;
- 比较的两个类的类型应该相同
if (getClass() != otherObject.getClass()) return false;
但是有一些人可能会使用下面的方式:
if (!(otherObject instanceof ThisClass)) return false;
这样会导致一个问题, 如:
// 父类
class People {
public People(String name) {
this.name = name;
} public boolean equals(Object obj) {
if (this == obj) return true; if (obj == null) return false; // if (getClass() != obj.getClass()) return false;
if (!(obj instanceof People)) return false; People other = (People) obj;
return name.equals(other.name);
} private String name;
} // 子类
class Student extends People {
public Student(String name, String studentID) {
super(name);
this.studentID = studentID;
} public boolean equals(Object obj) {
if (!super.equals(obj)) return false; Student s = (Student) obj; return studentID == s.studentID;
} private String studentID;
}当在main函数中运行下面的例子时, 就会抛出ClassCastException的异常
public class Demo {
public static void main(String[] args) {
People p1 = new People("zhang");
Student s1 = new Student("zhang", "ID1"); System.out.println(s1.equals(p1));
}
}因此在具体实现过程中建议使用:
if (getClass() != otherObject.getClass()) return false;
- 最后进行类型转换, 比较各个字段的大小
People other = (People) obj;
return name.equals(other.name);
3 将汇率转换器中的部份代码进行修改
将Money类中的equals方法进行修改:
/**
当货币单位以及货币量都相等时, 两个货币对象就相等
@param obj 货币
@return 相等为<code>true</code>, 不相等为<code>false</code>
*/
public boolean equals(Object obj) {
if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Money other = (Money) obj;
return amount == other.amount
&& unit.equals(other.unit);
}
Date: 2014-05-17 Sat
Author: Zhong Xiewei
Org version 7.8.11 with Emacs version 24
[java] 更好的书写equals方法-汇率换算器的实现(4)的更多相关文章
- 关于java中的hashcode和equals方法原理
关于java中的hashcode和equals方法原理 1.介绍 java编程思想和很多资料都会对自定义javabean要求必须重写hashcode和equals方法,但并没有清晰给出为何重写此两个方 ...
- [java] 汇率换算器实现-插曲1-正则表达式(1)
[java] 汇率换算器实现-插曲1-正则表达式(1) // */ // ]]> // */ // ]]> [java] 汇率换算器实现-插曲1-正则表达式(1) Table of C ...
- [java] 汇率换算器实现(2)
[java] 汇率换算器实现(2) // */ // ]]> // */ // ]]> [java] 汇率换算器实现(2) Table of Contents 1 系列文章地址 2 前 ...
- [java] 汇率换算器实现(3)
[java] 汇率换算器实现(3) // */ // ]]> [java] 汇率换算器实现(3) Table of Contents 1 系列文章地址 2 前言 3 提取简单表单信息 3.1 ...
- [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3
[java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3 // */ // ]]> [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3 Table of C ...
- [java] jsoup使用简介-汇率换算器实现-插曲2
[java] jsoup使用简介-汇率换算器实现-插曲2 // */ // ]]> [java] jsoup使用简介-汇率换算器实现-插曲2 Table of Contents 1 系列文章 ...
- [java] 汇率换算器实现(1)
[java] 汇率换算器实现(1) // */ // ]]> [java] 汇率换算器实现(1) Table of Contents 1 问题描述 2 类设计 3 初步实现 3.1 建立项目 ...
- Java 重写hashCode 方法和equals方法
package Container; import java.util.HashSet; import java.util.Iterator; /* Set 元素是无序的(存入和取出的顺序不一定一致) ...
- Java:Object类的equals()方法 如何编写一个完美的equals()方法
一 代码实例: package freewill.objectequals; /** * @author freewill * @see Core Java page161 * @desc get ...
随机推荐
- Struts2标签大全
A:<s:a xhref=""></s:a>-----超链接,类似于html里的<a></a><s:action name=& ...
- CI框架,源代码一次性判断获取post(get)数据是否有某个字段值为空方法
一.以下是CI框架 1.把所有的要接收的字段放在数组中 例: 我要接收:id,name,age,mobile 等字段 $req = array('id','name','age','mobile'); ...
- 使用PowerShell找出具体某个站点所使用的模板(Web Template)名称?
$web = get-spweb –identity http://servername/sites/site/web #得到站点的对象 $web.WebTemplate #得到WebTemplate ...
- vue组件编译原理
<body> <my-com1 type="type" v-pre="pre">com1</my-com1> <my- ...
- SQL语句优化(转载)
一.操作符优化 1.IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用 ...
- [Xamarin] 使用Webview 來做APP (转帖)
有時候,企業要求的沒有這麼多,他原本可能官方網站就已經有支援Mobile Web Design 他只需要原封不動的開發一個APP 也或是,他只是要型錄型,或是問卷調查的型的APP,這時候透過類似像if ...
- node(async原理)
node中的async是用来实现同步操作的,提供包括map.Series等方法,本文不做赘述. 由于项目需要在浏览器端用了async.js,因此仔细看了下它的代码.原来,一直以为node是在服务端调用 ...
- 【CSS3进阶】酷炫的3D旋转透视
之前学习 react+webpack ,偶然路过 webpack 官网 ,看到顶部的 LOGO ,就很感兴趣. 最近觉得自己 CSS3 过于薄弱,想着深入学习一番,遂以这个 LOGO 为切入口,好好研 ...
- 一个App完成入门篇(七)- 完成发现页面
第七章是入门篇的倒数第二篇文章了,明天整个APP将进入收官. 本节教程主要要教会大家使用二维码扫描和用do_WebView组件加在html页面. 导入项目 do_WebView组件 扫描功能 自定义事 ...
- 软件工程(QLGY2015)博客点评总结
目录 第一次作业(2015.5.9) 第二次作业(2015.5.21) 第三次作业(2015.6.11) 2015上半年软工助教总结 第一次作业(2015.5.9) 存在主要问题 1)书写这种练习博客 ...