我正在建立一个事件系统,我希望我所有的事件都能扩展
Event
我创建的类。不过,我也希望在任何时候都能添加一个额外的
setCanceled
和
isCanceled
举个例子:
public class Event {}
public interface EventCancelable {
public default void setCanceled(boolean canceled) {...}
public default boolean isCanceled() {...}
}
public class PlayerEvent extends Event {
public Player player;
public PlayerEvent(Player player) {
this.player = player;
}
}
public class PlayerMovementEvent extends PlayerEvent implements EventCancelable {...}
如您所见,稍后我使用了一个接口来添加这些方法。
问题是如果取消活动,我必须如何存储:
public interface EventCancelable {
Map canceled = new HashMap<>();
public void setCanceled(boolean canceled) {
canceled.put(this, canceled);
}
public boolean isCanceled() {
return canceled.get(this);
}
}
注意,由于Java只允许静态字段,所以我必须创建一个映射来存储取消的事件。这工作得很好,但是过一段时间,考虑到事件被频繁调用,这将占用越来越多的内存。有没有一种方法可以在不使用接口的情况下添加可取消的特性,也不必手动将代码放入每个我想取消的事件中?我不能用枪
EventCancelable
PlayerMovementEvent
无法扩展
PlayerEvent
可取消事件
玩家事件
是可以取消的。
或者Java是否足够聪明,可以清空不再使用的额外事件的映射,因为映射只在与的接口中使用
this
添加为参数?