[java] 更好的书写equals方法-汇率换算器的实现(4)

 

[java] 更好的书写equals方法-汇率换算器的实现(4)

2 完美的一个equals方法应该包含的内容

  1. 首先判断两个对象是不是同一个对象

    if (this == otherObject) return true;
    
  2. 当另一个对象为空时, 返回false
    if (otherObject == null) return false;
    
  3. 比较的两个类的类型应该相同
    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;
    
  4. 最后进行类型转换, 比较各个字段的大小
    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

Validate XHTML 1.0

[java] 更好的书写equals方法-汇率换算器的实现(4)的更多相关文章

  1. 关于java中的hashcode和equals方法原理

    关于java中的hashcode和equals方法原理 1.介绍 java编程思想和很多资料都会对自定义javabean要求必须重写hashcode和equals方法,但并没有清晰给出为何重写此两个方 ...

  2. [java] 汇率换算器实现-插曲1-正则表达式(1)

    [java] 汇率换算器实现-插曲1-正则表达式(1) // */ // ]]> // */ // ]]>   [java] 汇率换算器实现-插曲1-正则表达式(1) Table of C ...

  3. [java] 汇率换算器实现(2)

    [java] 汇率换算器实现(2) // */ // ]]> // */ // ]]>   [java] 汇率换算器实现(2) Table of Contents 1 系列文章地址 2 前 ...

  4. [java] 汇率换算器实现(3)

    [java] 汇率换算器实现(3) // */ // ]]>   [java] 汇率换算器实现(3) Table of Contents 1 系列文章地址 2 前言 3 提取简单表单信息 3.1 ...

  5. [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3

    [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3 // */ // ]]>   [java] 注释以及javadoc使用简介-汇率换算器的实现-插曲3 Table of C ...

  6. [java] jsoup使用简介-汇率换算器实现-插曲2

    [java] jsoup使用简介-汇率换算器实现-插曲2 // */ // ]]>   [java] jsoup使用简介-汇率换算器实现-插曲2 Table of Contents 1 系列文章 ...

  7. [java] 汇率换算器实现(1)

    [java] 汇率换算器实现(1) // */ // ]]>   [java] 汇率换算器实现(1) Table of Contents 1 问题描述 2 类设计 3 初步实现 3.1 建立项目 ...

  8. Java 重写hashCode 方法和equals方法

    package Container; import java.util.HashSet; import java.util.Iterator; /* Set 元素是无序的(存入和取出的顺序不一定一致) ...

  9. Java:Object类的equals()方法 如何编写一个完美的equals()方法

    一  代码实例: package freewill.objectequals;  /** * @author freewill * @see Core Java page161 * @desc get ...

随机推荐

  1. java的英文词频算法

    java实现的英文词频算法,通常是采用单词树来实现的.使用java实现词频统计,为了统计词汇出现频率,最简单的做法是再建立一个map,其中,key是单词,value代表次数.将文章从头读到尾,读到一个 ...

  2. Redis分布式锁服务(八)

    阅读目录: 概述 分布式锁 多实例分布式锁 总结 概述 在多线程环境下,通常会使用锁来保证有且只有一个线程来操作共享资源.比如: object obj = new object(); lock (ob ...

  3. IIS发布站点错误收集(持续更新)

    本文主要收集IIS在发布站点过程中遇到的错误,并提供解决办法.并亲测可行.如果您也在使用IIS发布站点的过程中遇到了一些问题,欢迎留言提问. (1.) HTTP错误500.21-Internal Se ...

  4. .NET中STAThread和MTAThread

    本文讨论在.NET中使用进程内COM组件时的公寓模型,以一个示例直观演示STAThread和MTAThread的作用和区别. 1. COM中的公寓 1.1 基本规则 公寓是COM组件的运行环境,日常生 ...

  5. MySQL 存储过程

    MySQL 存储过程 存储过程是通过给定的语法格式编写自定义的数据库API,类似于给数据库编写可执行函数. 简介 存储过程是一组为了完成特定功能的SQL语句集合,是经过编译后存储在数据库中. 存储过程 ...

  6. YY一下微信线下支付的场景

    在上一篇文章里面提到了 <跨行清算的实现原理>,这次来分析一下线下支付的场景和流程. 今天看到一篇文章:http://www.huxiu.com/article/23248/1.html? ...

  7. RAID 概述

      原创地址:http://www.cnblogs.com/jfzhu/p/3999283.html 转载请注明出处   独立硬盘冗余阵列(RAID, Redundant Array of Indep ...

  8. PHP制作查询租房表

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. WCF 安全性 之 Windows

    案例下载 http://download.csdn.net/detail/woxpp/4113172 服务端配置代码 <system.serviceModel> <services& ...

  10. 改变textView的个别字体颜色

    Spannable span = new SpannableString(getString(R.string.register_need_to_ageree));//例如:register_need ...