Java:如何为真正没有任何状态的类编写适当的equals方法?
|
考虑以下接口:
public interface Listenable {
void listen();
}
考虑以下实现:
public class Listener implements Listenable {
public void listen() {
System.out.println(\"I am listening\");
}
}
现在,我正在通过RMI进行远程处理,并将此类的实例传递给服务器(可能不确定那里是否出现了一些黑魔法代理)。
到目前为止,我唯一能够发明的解决方案,而且不得不说它很愚蠢,是将以下代码添加到Listener类:
public class Listener implements Listenable {
private double id;
private Random rand = new Random();
public Listener() {
this.id = rand.nextDouble();
}
public void listen() {
System.out.println(\"I am listening\");
}
public int hashCode() { ... } // calculate from id
// same for equals - compare by id
}
这通常是可行的,但是我们都知道这是多么的邪恶:/应该如何处理这种情况?
更新:
Stanard equals对我不起作用,因为实例位于不同的VM上(我提到了远程处理),因此它无法工作。毕竟,我将需要一些状态变量,或者提出一些有益的方法来比较远程VM上的此类。很抱歉给您带来混乱。
没有找到相关结果
已邀请:
4 个回复
厘恼轨
这样一来,只有一个instance4ѭ实例,并且保证相等。 您可能不想暴露这样的事实,您为此使用了ѭ5,甚至侦听器根本就是单身。您可以做的是使用静态方法(例如,称为
)使该枚举成为某个类的私有内部枚举,并通过静态方法公开此实现:
孤捷侩
死狸蔽垂藐
我担心ѭ10,因为子类可能不会被视为同一对象。
蕾跨立锌煤