gpt4 book ai didi

java - 当一个类也扩展了另一个类时,如何使一个类扩展 Observable?

转载 作者:IT老高 更新时间:2023-10-28 20:27:59 25 4
gpt4 key购买 nike

我正在学习 Java,我想将我的类(class)变成一个可观察的类(class)。

但是我已经让它扩展了另一个类。

我该怎么办?

最佳答案

我建议完全避免使用 Observable 类,而是定义特定于事件的监听器和相应的事件定义。然后在您的类中定义一个监听器列表以及添加和删除监听器的方法,并将事件传播给它们(见下文)。

Observable 强制你使用java.lang.Object 来表示事件,然后使用instanceof 来检查事件类型,这很丑非 OO 方法,并使代码更难理解。如果您查看 javax.swing 包中的类,您会发现它们完全避免使用 Observer/Observable 并使用类似于以下的方法。

事件定义

public class MyChangeEvent extends EventObject {
// This event definition is stateless but you could always
// add other information here.
public MyChangeEvent(Object source) {
super(source);
}
}

监听器定义

public interface MyChangeListener {
public void changeEventReceived(MyChangeEvent evt);
}

类定义

public class MyClass {
// Use CopyOnWriteArrayList to avoid ConcurrentModificationExceptions if a
// listener attempts to remove itself during event notification.
private final CopyOnWriteArrayList<MyChangeListener> listeners;

public class MyClass() {
this.listeners = new CopyOnWriteArrayList<MyChangeListener>();
}

public void addMyChangeListener(MyChangeListener l) {
this.listeners.add(l);
}

public void removeMyChangeListener(MyChangeListener l) {
this.listeners.remove(l);
}

// Event firing method. Called internally by other class methods.
protected void fireChangeEvent() {
MyChangeEvent evt = new MyChangeEvent(this);

for (MyChangeListener l : listeners) {
l.changeEventReceived(evt);
}
}
}

关于java - 当一个类也扩展了另一个类时,如何使一个类扩展 Observable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1658702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com