我用Java实现了一个不可变的系统.几乎每个班级都是不可改变的,并且它比我预期的要好得多.
我的问题是尝试发送事件.通常,您有一个事件源和一个事件监听器.源只是保存对侦听器的引用,并在事件发生时发送事件.
但是对于不可变,当您修改字段并创建新对象时,事件侦听器引用会发生更改.所以事件源发送到一些垃圾收集的旧引用.
因此,我的所有GUI类都是可变的,因为它们自然会使用很多事件.但我想找到一种处理事件的优雅方式,这样我就可以使这些事件变得不可变.
编辑:请求的示例代码:
public final class ImmutableButton {
public final String text;
public ImmutableButton(String text) {
this.text = text;
}
protected void onClick() {
// notify listeners somehow, hoping they haven't changed
}
}
public final class ImmutableWindow {
public final ImmutableButton button;
public ImmutableWindow(ImmutableButton button) {
this.button = button;
}
protected void listenForButtonClick() {
// somehow register with button and receive events, despite this object
// being entirely recreated whenever a field changes
}
}
Run Code Online (Sandbox Code Playgroud)