在 java 中使子类可观察
Making a subclass observable in java
我有一个名为 Passenger 的子class,它是从一个人 class 扩展而来的。我想让 Passenger class 成为一个可观察的对象。所以我是这样做的,
class Person extends Observable{
}
class Passenger extends Person{
public void move(){
setChanged();
notifyObservers();
}
}
class Manager implements Observer{
@Override
public void update(Observable o, Object arg) {
}
}
当我不需要 class 的可观察功能时,让 Person class 可观察是一种不好的做法吗?如果可以,我该如何更改?
我认为 java 中的 Obervable class 是一个考虑不周的 class。在我看来它真的很想出现在界面中。
然而,除了让 Person 从 Observable 扩展之外,您还可以在 Passenger 级别使用组合。
在您的 Passenger class 中,您可以使用如下代码:
private Observable observable = new Observable();
public void addObserver(Observer o) {
observable.addObserver(o);
}
public void notifyObservers() {
observable.notifyObservers();
}
这是与可观察对象的组合关系。它应该工作得很好。
有关此问题的更多信息:
Why is java.util.Observable not an abstract class?
您还可以使 Person class 成为一个接口,这样 Passenger class 就可以扩展 Observable 并实现 Person。只是一个想法。
我有一个名为 Passenger 的子class,它是从一个人 class 扩展而来的。我想让 Passenger class 成为一个可观察的对象。所以我是这样做的,
class Person extends Observable{
}
class Passenger extends Person{
public void move(){
setChanged();
notifyObservers();
}
}
class Manager implements Observer{
@Override
public void update(Observable o, Object arg) {
}
}
当我不需要 class 的可观察功能时,让 Person class 可观察是一种不好的做法吗?如果可以,我该如何更改?
我认为 java 中的 Obervable class 是一个考虑不周的 class。在我看来它真的很想出现在界面中。
然而,除了让 Person 从 Observable 扩展之外,您还可以在 Passenger 级别使用组合。
在您的 Passenger class 中,您可以使用如下代码:
private Observable observable = new Observable();
public void addObserver(Observer o) {
observable.addObserver(o);
}
public void notifyObservers() {
observable.notifyObservers();
}
这是与可观察对象的组合关系。它应该工作得很好。
有关此问题的更多信息:
Why is java.util.Observable not an abstract class?
您还可以使 Person class 成为一个接口,这样 Passenger class 就可以扩展 Observable 并实现 Person。只是一个想法。