gpt4 book ai didi

Java 通用观察者模式实现未经检查的调用作为原始类型

转载 作者:搜寻专家 更新时间:2023-11-01 01:26:32 24 4
gpt4 key购买 nike

我目前正在尝试使用 Java 中的观察者模式的通用实现,我发现它似乎工作得很好,除了它会生成未经检查的调用警告,如果可能的话我想修复它。实现看起来像这样:

接口(interface),IObservable.java:

public interface IObservable<T> {
void addObserver(IObserver<T> observer);
void removeObserver(IObserver<T> observer);
}

基类Observable.java:

import java.util.ArrayList;

public class Observable<T> implements IObservable<T> {
private final ArrayList<IObserver<T>> observers
= new ArrayList<IObserver<T>>();

public void addObserver(IObserver<T> observer) {
synchronized (observers) {
observers.add(observer);
}
}

public void removeObserver(IObserver<T> observer) {
synchronized (observers) {
observers.remove(observer);
}
}

protected void notifyObservers(final T t) {
synchronized (observers) {
for (IObserver<T> observer : observers) {
observer.notify(t);
}
}
}
}

观察者接口(interface)IObserver.java:

public interface IObserver<T> {
void notify(T model);
}

我的 Observable 类 Subject.java:

public class Subject extends Observable {
private int foo;
private int bar;

public int getFoo() { return foo; }
public int getBar() { return bar; }

public void setFoo(int f) {
foo = f;
notifyObservers(this);
}

public void setBar(int b) {
bar = b;
notifyObservers(this);
}
}

每次调用 notifyObservers 时都会出现未经检查的调用警告。完整的警告是

java: warning: [unchecked] unchecked call to notifyObservers(T) as a member of the raw type com.foo.Observable

有什么办法可以解决这个问题,还是我应该只使用@suppressWarnings("unchecked")?或者也许我应该像这样,事实上,一个安全的方法调用?

最佳答案

您没有为 Observable 提供类型参数在你的extends Subject 的条款.既然你声明了 Observable<T>在那个类中,你应该声明:

public class Subject extends Observable<Subject> {
...
}

关于Java 通用观察者模式实现未经检查的调用作为原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21713497/

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