Java general Observer mode to achieve the original type is not selected.

I'm currently trying to take advantage of the general implementation of observer mode in Java. I find it seems to work well, except that it generates unchecked call warnings, and I want to fix it if possible The implementation is as follows:

Interface, iobserveable java:

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

Base class 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);
            }
        }
    }
}

Observer interface IObserver java:

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

My observable class 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);
    }
}

Every time notifyobservers is called, an unchecked call warning is issued The complete warning is

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

Is there any way to solve this problem, or should I only use @ suppresswarnings ("unchecked")? Or maybe I should even, in fact, a safe method call?

Solution

You did not provide a type parameter for observable in the extensions clause of the subject Since you declared observable < T > in this course, you should declare:

public class Subject extends Observable<Subject> {
  ...
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>