如果我有一個複雜的繼承層次,我想做一個平等檢查,取決於具體的平等有沒有一種方法來確保我運行使用該平等檢查,而不是一個可能表現不同的孩子類重寫的版本,然後我想要?運行等同的方法由父類從外部類定義
舉個例子可以說我有與它自己的平等類FOO,然後我有一些像用噓聲等於類有點像下面sudocode(懶得去糾正它全稱)
class Foo {
int id;
int otherId;
int count;
public boolean equals(Object other){
//check other instance of foo and re-cast
return (id==other.id && otherId==other.otherId)
}
}
class Bar extends Foo{
private someObject uniqueValue;
public boolean equals(Object other){
//check other instance of foo and re-cast
return super.equals(other) && other.getUniqueValue.equals(this.getUniqueValue);
{
}
然後我有一些方法,這需要其引用相同的foo和添加了計數他們
public combineFoos(Foo foo1, Foo foo2){
if(! foo1.equals(foo2))
throw IllegalArgumentException("no match");
Foo combinedFoo=new Foo(foo1.id, foo1.otherId, (foo1.count + foo2.count))
return combinedFoo
}
}
理論上,這所有的作品太富的對象,直到酒吧價值的用武之地。現在,如果我叫combineFoo並通過一個酒吧foo1它失敗,因爲酒吧等於方法車cks foo2是一個instanceOf欄。我真的不在乎foo2是否是酒吧,我需要的信息可以用於任何foo。對於這個問題,如果我傳遞了兩個不相等的條,這兩個條都等於foo的平等方法定義的條件(即只有uniqueValue字段不同),我希望combineFoo仍然接受它們作爲相等的Foo,即使Bar不等於Bar的定義。
問題是我想對FOO認爲的平等性進行平等檢查,但我不知道我實際可能會收到哪些奇怪的繼承類。有沒有辦法解決這個問題,基本上在我的combineFoo中說,總是使用FOOs的equals定義,即使它被一個子類覆蓋了嗎?
相關,這是一個更糟糕的想法,那麼我認爲它是即使可行,還是有一些其他方式來處理像上面的例子,有效地重新寫在foo的combineFoo內平等的方法嗎?
'Equals'不是'equals'。使用正確的方法。 – MikeCAT
你的代碼有很多錯別字,它不能按原樣編譯,難以專注於實際問題。 – Tunaki
@tunaki正如我所說,它只是sudocode,我留下了部分邏輯的評論。我只是試圖從概念上證明這種差異。我不認爲跑步是需要理解的概念嗎? – dsollen