有个类一直无法理解,情况是这样的,该类有个内部接口,确定没有任何实现方法,怀疑代码不全需要自己补充,请高手支招确定下,第一次发帖,望大家捧捧场,谢谢!
PresenceEventDispatcher继承的一个引用自己内部接口的抽象类,有“<”刚被csdn隐藏了
public class PresenceEventDispatcher extends EventDispatcher<PresenceEventDispatcher.PresenceEventListener> {
private final PresenceWorker presenceWorker = new PresenceWorker();
public void availableSession(ClientSession session) {
if (!listeners.isEmpty()) {
for (PresenceEventListener listener : listeners) {
listener.availableSession(session);
}
}
presenceChanged(session);
}
public void unavailableSession(ClientSession session) {
if (!listeners.isEmpty()) {
for (PresenceEventListener listener : listeners) {
listener.unavailableSession(session);
}
}
presenceChanged(session);
}
public void presenceChanged(ClientSession session) {
if (!listeners.isEmpty()) {
for (PresenceEventListener listener : listeners) {
listener.presenceChanged(session, session.getPresence());
}
}
presenceWorker.push(session.getPresence());
}
public interface PresenceEventListener extends EventListener {
public void availableSession(ClientSession session);
public void unavailableSession(ClientSession session);
public void presenceChanged(ClientSession session, Presence presence);
}
}
public abstract class EventDispatcher {
protected List<T> listeners = new CopyOnWriteArrayList<T>();
/**
* Registers a listener to receive events.
*
* @param listener the listener.
*/
public void addListener(T listener) {
if (listener == null) {
throw new NullPointerException();
}
listeners.add(listener);
}
/**
* Unregisters a listener to receive events.
*
* @param listener the listener.
*/
public void removeListener(T listener) {
listeners.remove(listener);
}
}
语法上就报错了吧,public interface PresenceEventListener 方法?
那几个接口方法应该在EventDispatcher 类中已经实现了。然后PresenceEventDispatcher 重写了那几个方法。
分析下你的代码是没有问题的。
首先,PresenceEventDispatcher extends EventDispatcher这个继承关系没有问题的,你的抽象类中没有抽象方法需要PresenceEventDispatcher来实现,所以这个类的代码是完整的。
其次,PresenceEventDispatcher这个类继承了一个列表,存储一组内部类PresenceEventListener 的引用,这个list应该是其他类调用时传入的,不应该由这个类实现的。
你可以跟踪下PresenceEventListener 类的实现有哪些,单击选中这个类名,然后ctrl+T查看这个类的继承体系。
EventDispatcher 这只是传进去的一个泛型吧,实现接口的关键字是 implements,不知道是楼主理解错了还是我理解错了