重写java Eques()方法-不工作吗?

我遇到了一个有趣的(非常令人沮丧的)问题equals()方法,它导致了我认为经过良好测试的类崩溃,并导致了一个错误,我花了很长时间才找到它。

为了完整起见,我没有使用IDE或调试器-只是好的老式文本编辑器和System.out。时间非常有限,这是一个学校项目。

总之-

我正在开发一个基本的购物车,它可以包含一个ArrayList的Book对象..为了实现addBook(), removeBook(),和hasBook()购物车的方法,我想检查一下Book已经存在于Cart..所以我走了-public boolean equals(Book b) {

... // More code here - null checks

if (b.getID() == this.getID()) return true;

else return false;}

所有的测试都很好。我创建了6个对象并用数据填充它们。控件上的许多添加、移除和带()操作。Cart一切都很好。我读到你可以要么有equals(TYPE var)或equals(Object o) { (CAST) var }但认为既然起作用了,就没什么大不了的了。

然后我遇到了一个问题-我需要创建一个Book对象只这个ID在它里面的书类。没有其他数据可输入。基本上如下:public boolean hasBook(int i) {

Book b = new Book(i);

return hasBook(b);}public boolean hasBook(Book b) {

// .. more code here

return this.books.contains(b);}

突然,equals(Book b)方法不再起作用。如果没有良好的调试器,这需要很长时间才能找到,并且假设Cart班级经过了适当的测试和修正。擦拭后equals()方法:public boolean equals(Object o) {

Book b = (Book) o;

... // The rest goes here   }

一切又开始运转了。这个方法决定不接受Book参数是有什么原因的,尽管它很清楚曾. a Book反对?唯一的区别似乎是它是从同一个类中实例化的,并且只填充了一个数据成员。我很困惑。拜托,放点光?

java中que_重写java Eques()方法-不工作吗?相关推荐

  1. java 重写方法 访问权限_为何Java中子类重写方法的访问权限不能低于父类中权限(内含里氏替换原则)...

    为何Java中子类重写方法的访问权限不能低于父类中权限 因为 向上转型及Java程序设计维护的原因 例: 假设一个父类A 拥有的方法public void setXXX(){}可以被其他任意对象调用这 ...

  2. Java中图形界面重绘方法

    ** Java中图形界面重绘方法 **   在我们编写图形界面程序的过程中,我们就会发现,当我们将窗体拉伸,缩小(或者最大化最小化)的时候,之前在窗体上画的图形会消失了. 这是为什么呢?   1)原来 ...

  3. Java重载和重写6_深入理解Java中的重写和重载

    深入理解Java中的重写和重载 重载(Overloading)和重写(Overriding)是Java中两个比较重要的概念.但是对于新手来说也比较容易混淆.本文通过两个简单的例子说明了他们之间的区别. ...

  4. 【转】Java中获取文件大小的正确方法

    [转]Java中获取文件大小的正确方法 本文出处:http://blog.csdn.net/chaijunkun/article/details/22387305,转载请注明.由于本人不定期会整理相关 ...

  5. 在Java中实现单例模式的有效方法是什么? [关闭]

    在Java中实现单例模式的有效方法是什么? #1楼 我使用Spring框架来管理我的单身人士. 它不会强制类的"单一性"(如果涉及多个类加载器,您将无法真正做到),但是它提供了一种 ...

  6. java中的五种排序方法_用Java排序的五种有用方法

    java中的五种排序方法 Java排序快速概述: 正常的列表: private static List VEGETABLES = Arrays.asList("apple", &q ...

  7. java double add,Java中的DoubleStream.Builder add()方法

    add()Java中DoubleStream.Builder类的方法将元素添加到正在构建的流中.该方法返回此构建器. 语法如下default DoubleStream.Builder add(doub ...

  8. Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释

    Java中String类的concat方法 在了解concat()之前,首先需要明确的是String的两点特殊性. 长度不可变 值不可变 这两点从源码中对String的声明可以体现: private ...

  9. js解析java对象数组_js接收并转化Java中的数组对象的方法

    在做项目时,要向ocx控件下发命令,就要在js中得到java中的对象,然后拼成一种格式,下发下去...当对象是一个时比较简单,但如果对象是一个数组时,就略显麻烦了. 开始我以为有简单的方式,可以直接进 ...

最新文章

  1. ReentrantReadWriteLock
  2. 如何使用Azure ML Studio开启机器学习
  3. anaconda 历史版本_【windows】下Anaconda详细安装过程
  4. IIC原理及简单流程
  5. SingnalR 开发到生产部署闭坑指南
  6. 会议通知|第3届全国高校大数据教学研讨会
  7. SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法
  8. Java中的LinkedHashSet
  9. 20+个很棒的Android开源项目
  10. jdbc mysql url写法_Springboot项目连接MySql写了一个bug你也可能遇到
  11. 随机样例生成器(外观优化)
  12. mac安装mysql8.0
  13. 字典生成工具——crunch
  14. 如何关闭AutoCAD2016上的“开始”界面、打开CAD就自动新建一个drawing1、“文件”选项卡?
  15. 安静模式 运行 reg注册表文件
  16. TortoiseSVN 使用教程
  17. 2021年10月程序员薪资出炉,你在哪个层级?
  18. 2019年Java大厂面试题讲解(周阳) 之Github学习(自学路上助推器)
  19. php储存网页内容的简单示范
  20. Xcode调试中如何将指定地址转换为其指向的对象

热门文章

  1. 类和对象—对象特性—拷贝构造函数调用时期
  2. python之人脸识别
  3. springboot 配置DRUID数据源
  4. 你以为A10 Networks只做应用交付?
  5. React Native系列(6) - 编译安卓私有React-Native代码
  6. android launchmode singleinstance问题
  7. Linux Shell脚本实现根据进程名杀死进程
  8. Android服务之Service(其一)
  9. 网页设计中的默认字体样式详解
  10. 【试验】三个用于日常监控开发库与对应测试库的存储过程