1
假設我有:的Java協方差/禁忌方差
class Event {}
class DoorBell extends Event {}
class PhoneCall extends Event {}
class EventGenerator {
static Event getEvent() {
if (today.isSunday())
return new DoorBell()
else
return new PhoneCall();
}
}
class EventHandler {
void HandleEvent(DoorBell doorBell) { answer door; }
void HandleEvent(PhoneCall phoneCall) { answer phone; }
void consumeEvent() {
Event e = EventGenerator.getEvent();
HandleEvent(e);
}
}
的handleEvent(五)無法編譯,因爲爲handleEvent(事件)是不確定的。有沒有解決方案?或者我必須問問它是什麼樣的事件?
看來,您正在嘗試重新創建代數數據類型和模式匹配。你的「void HandleEvent」只是靜態重載,它是由靜態類型信息調度的,所以它們不適合。對於所需的行爲,您應該問「事件」類型的事件,或者使用訪問者等重磅調度模式。還要考慮切換到Scala。 – aemxdp
聽起來像訪問者模式的工作。我試圖回答一個[類似的問題](http://stackoverflow.com/a/13150467/697630)最近也許它包含一些有趣的想法,可能不是答案,但值得考慮。 –