Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何避免每次重写AddObservable?_Java_Swing_Generics_Observer Pattern - Fatal编程技术网

Java-如何避免每次重写AddObservable?

Java-如何避免每次重写AddObservable?,java,swing,generics,observer-pattern,Java,Swing,Generics,Observer Pattern,我目前正在为大学制作一个小游戏。我有一个扩展Observable并实现接口的模型 由于接口的原因,我必须每次为我添加的每个观察者重写addObserver方法。并将additional方法添加到接口中。现在看起来是这样的: @Override public void addObserver(UniversityView universityView) { super.addObserver(universityView); } @Override public void addObse

我目前正在为大学制作一个小游戏。我有一个扩展Observable并实现接口的模型

由于接口的原因,我必须每次为我添加的每个观察者重写addObserver方法。并将additional方法添加到接口中。现在看起来是这样的:

@Override
public void addObserver(UniversityView universityView) {
    super.addObserver(universityView);

}
@Override
public void addObserver(CourseView courseView) {
    super.addObserver(courseView);

}
@Override
public void addObserver(TaskForceView taskForceView) {
    super.addObserver( taskForceView);
}
public class TaskForceView extends JPanel implements Observer{
     public TaskForceView(Observable observable){
         ...  
         observable.addObserver(this);
     }
}
其中每个视图都是一个扩展的JPanel。由于我必须遵守特定的指标,其中也包括每个类的最大方法数量,所以我喜欢将其减少到一个。或者完全避免重写addObserver方法。因为我正在以任何方式使用父方法

但问题是:我真的不知道怎么做。我能想到的唯一解决办法就是使用泛型。但我对泛型不太熟悉


谢谢你的帮助

如果您的视图都扩展了JPanel,您可以这样做

@Override
public void addObserver(JPanel someView) {
    super.addObserver((Observer) someView);
}
完全避免这种情况的一个想法是在创建视图时将视图注册为观察者。看起来像这样:

@Override
public void addObserver(UniversityView universityView) {
    super.addObserver(universityView);

}
@Override
public void addObserver(CourseView courseView) {
    super.addObserver(courseView);

}
@Override
public void addObserver(TaskForceView taskForceView) {
    super.addObserver( taskForceView);
}
public class TaskForceView extends JPanel implements Observer{
     public TaskForceView(Observable observable){
         ...  
         observable.addObserver(this);
     }
}

(我没有尝试过这个方法,但它在某种程度上与观察者模式相反,因为它颠倒了通常使用的方式)

嘿,这对我来说是一个简单的方法,甚至可以让我思考它。在你的解决方案中,我要做的唯一一件事就是向观察家发表一些看法。类似super.addObserver((Observer)面板)的东西;我不想把你的答案标记为解决方法,因为我也很感兴趣,如果有办法避免这种方法的话。非常感谢!事实上,一个需要投给观察者的人,从我身边走过。我想我开始依赖IDE对我大喊大叫。增加了另一种可能性。这里提到了一些observer模式的替代实现。