【发布时间】:2014-03-12 04:52:34
【问题描述】:
假设我有一个域对象,这是伪代码
public class SampleClass {
id
title
... a lot of other fields from database
public boolean equals(AnotherObj) {
return this.id.equals(AnotherObj.id);
}
}
equals 方法是基于 id 的,适用于大多数场景。但在一种情况下,如果标题相同,则两个对象应被视为相等。 对象放在list和list.contains(obj)中,list.indexOf(obj)被大量调用用于业务逻辑,这取决于equals方法。
如何在运行时重写equals方法? sampleClass 对象可能包含复杂的子树,我不想将它复制到内存中。
我想为现有对象创建一个包装器。包装器仅包含特定的 equals 方法,所有其他方法调用仍应传递给现有对象。
我查看了 cglib,但它必须自己生成目标对象,它不能包装现有对象。
有什么简单的方法吗?
【问题讨论】:
-
危险:这不是
Object的.equals()你在这里覆盖 -
您想在大多数情况下实现proxy pattern 并传递对代理对象的调用,但根据代理对象的底层类做一些不同的事情?
-
我知道这不是对象的平等。这就是为什么我只想将特定的 equal 放在包装器中。
-
当您将自己复杂到这种程度时,它会告诉您您正在寻找解决方案的错误位置。
-
那看我的回答;需要番石榴,但番石榴是金矿
标签: java object runtime overriding