我定義的接口RecordVisitor
的方法外使用對象的引用,聲明如下:的Java:防止
public interface RecordVisitor<K, V, Result> {
public Result visit(Record<K, V> rec);
}
的想法是,visit
實現將調用一個記錄對象,做他們的邏輯,並返回結果。我想阻止實現存儲rec
值並在調用visit
之外使用它。
我認爲要做到這一點的唯一方法是將狀態添加到Record
,並拋出IllegalStateException
如果任何方法在記錄對象上被調用,而不是「活動」。然後,我會向javadoc寫入可怕的警告,並希望實施者閱讀它。
是否有更強大的方法來防止在visit
方法之外使用Record
對象?如果可能的話,我想建立一個接口,如果違反合同,會導致編譯時錯誤。
你可以讓'Record'不可變嗎?如果不是,那麼製作防禦性副本如何? – 2012-03-14 19:14:15
你可以避免給Record記錄任何使它變異的公共方法嗎?這似乎是最簡單,最OO的做法。 – 2012-03-14 19:15:20
如果有人調用你的函數並且必須將一個記錄傳入它,那麼你無法對它們控制的對象做任何事情。 – Woot4Moo 2012-03-14 19:22:08