Tag: override

覆盖equals方法

这里有新手问题: 所以在我的大学作业中,我必须为我创建的新类重写对象类equals方法。 新类是“Product”,每个产品都有一个唯一的“id”属性。 所以这就是我覆盖它的方式: @Override public boolean equals(Object obj) { final Product other = (Product) obj; if (id != other.id) return false; return true; } 事情是这样做是10分中的1.5分,让我怀疑是那么容易。 所以我开始搜索,我找到了类似的东西: @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final Product other = […]

HashMap优化的影响,它将与每个条目关联的哈希代码缓存到其get方法中

来自第46页“有效的Java”Joshua Bloch。 第9项:当你重写equals时,ALways会覆盖hashCode 某些类PhoneNumber会覆盖equals()并且不会覆盖hashCode() “涉及两个实例:一个用于插入HashMap,另一个用于(尝试)检索。” …“…即使两个实例碰巧哈希到同一个桶, get方法几乎肯定会返回null ,因为HashMap有一个优化缓存与每个条目关联的哈希代码,并且不需要检查如果哈希码不匹配,则对象相等。“ 问题是 – 如果“两个实例碰巧哈希到同一个桶”,为什么’get’将返回’null’? 什么是HashMap优化的角色(没有得到正确的实例)“兑现…”? 只是针对这种情况 – “这两个实例碰巧哈希到同一个桶” – 如果HashMap困扰“如果哈希码不匹配则对象相等”会怎么样?

equals()方法如何在Java中工作

equals方法比较两个对象值是否相等。 我的问题是如何比较这两个对象? 怎么能告诉两个对象是否相等? 我想知道它基于它比较两个对象。 我不包括hashCode方法。

@MustOverride注释?

在.NET中,可以为特定超类中的方法指定“mustoverride”属性,以确保子类覆盖该特定方法。 我想知道是否有人有一个可以达到同样效果的自定义java注释。 基本上我想要的是推动子类覆盖超类中的方法,该超类本身具有必须贯穿的逻辑。 我不想使用抽象方法或接口,因为我希望在super方法中运行一些常用function,但或多或​​少会产生编译器警告/错误,表示派生类应该覆盖给定方法。

流关闭而不是重新打开 – Java

我有一个简单的’功课’,但我发现输入流的关闭有点问题。 简单来说,我必须用Java创建一个联系人’列表’应用程序,只是以正确的方式使用多态。 所以我有一个类Contact和一个子类Private(联系人)。 在这两个类中都有一个修改方法来更改变量的值。 public void modify() throws IOException { System.out.println(“Previously name: ” + name); System.out.println(“Insert new name”); try(InputStreamReader ir = new InputStreamReader(System.in); BufferedReader in = new BufferedReader(ir) ) { name= in.readLine(); System.out.println(“You’ve changed the name to: “+ name); System.out.println(“Previously surname: ” + surname); System.out.println(“Insert new surname”); surname= in.readLine(); System.out.println(“You’ve changed the surname to: “+ […]

override equals方法来比较java中的多个字段

在java中重写equals方法以比较多个字段的最佳方法是什么? 例如,我在类中有4个对象,o1,o2,o3,o4,我希望将所有这些对象与传递的对象进行比较,使用equals方法。 if (o1 != null && o2 != null && o3 != null && o4 != null && obj.o1 != null && obj.o2 != null && obj.o3 != null && obj.o4 != null && o1.equals(obj.o1) && o2.equals(obj.o2) && o3.equals(obj.o3) && o4.equals(obj.o4)) { do something } 这段代码的问题在于它不清楚,如果我们有更多字段,就不能轻易修改。 有没有更好的方法来实现这一目标?

Java Set集合 – 覆盖equals方法

有没有办法覆盖Set数据类型使用的equals方法? 我为一个名为Fee的类编写了一个自定义equals方法。 现在我有一个LnkedList Fee LnkedList ,我想确保没有重复的条目。 因此,我正在考虑使用LinkedList一个Set insted,但是决定两个费用是否相等的标准存在于Fee类中的overriden equals方法中。 如果使用LinkedList ,我将不得不遍历每个列表项并在Fee类中调用overriden equals方法,其余条目作为参数。 仅仅阅读这个听起来像是太多的处理并且会增加计算复杂性。 我可以使用带有重写的equals方法的Set吗? 我是不是该?

您是否可以使用Groovy元编程来覆盖Java类上的私有方法

我正在尝试使用元编程覆盖Java类上的私有方法。 代码看起来像这样: // Java class public class MyClass{ private ClassOfSomeSort property1; private ClassOfSomeOtherSort property2; public void init(){ property1 = new ClassOfSomeSort(); property2 = new ClassOfSomeOtherSort(); doSomethingCrazyExpensive(); } private void doSomethingCrazyExpensive(){ System.out.println(“I’m doing something crazy expensive”); } } // Groovy class public class MyClassTest extends Specification{ def “MyClass instance gets initialised correctly”(){ given: ExpandoMetaClass emc = […]

为什么没有参数反差方法可以覆盖?

重写方法时,C ++和Java支持返回类型协方差。 但是,它们都不支持参数类型中的反差 – 相反,它转换为过载 (Java)或隐藏(C ++)。 那是为什么 ? 在我看来,允许这样做是没有害处的。 我可以在Java中找到它的一个原因 – 因为它无论如何都有“选择最特定版本”的重载机制 – 但是不能想到C ++的任何原因。 示例(Java): class A { public void f(String s) {…} } class B extends A { public void f(Object o) {…} // Why doesn’t this override Af? }