我正在尝试扩展Java ArrayList以支持事件,如本例所述: http://www.exampledepot.com/egs/java.util/CustEvent.html
问题是java报告'无法对以下行中的非静态类型MyEvent'进行静态引用:
public interface MyEventListener extends EventListener {
public void myEventOccurred(MyEvent evt);
}
我认为这与Generics有关,但我真的不知道如何解决这个问题。有人可以帮助我吗?
以下是我尝试做的完整资料来源:
public class ArrayList<E> extends java.util.ArrayList<E> {
private static final long serialVersionUID = 1L;
// Declare the event. It must extend EventObject.
public class MyEvent extends EventObject {
private static final long serialVersionUID = 1L;
public MyEvent(Object source) {
super(source);
}
}
// Declare the listener class. It must extend EventListener.
// A class must implement this interface to get MyEvents.
public interface MyEventListener extends EventListener {
public void myEventOccurred(MyEvent evt); //Error occurs here
}
}
答案 0 :(得分:2)
正如其他用户所指出的,您可以在自己的文件中执行所有类和接口,然后就不会出现问题 - 这是一种更好的方法。如果您打算使用内部类和接口,则需要声明它们static
:
public class ArrayList<E> extends java.util.ArrayList<E> {
private static final long serialVersionUID = 1L;
// Declare the event. It must extend EventObject.
public static class MyEvent extends EventObject {
private static final long serialVersionUID = 1L;
public MyEvent(Object source) {
super(source);
}
}
// Declare the listener class. It must extend EventListener.
// A class must implement this interface to get MyEvents.
public static interface MyEventListener extends EventListener {
public void myEventOccurred(MyEvent evt); //Error occurs here
}
}
答案 1 :(得分:1)
有一个更复杂的解决方案和一个更简单的解决方案。更简单的一个:不要在这里使用内部类或接口;根本没有必要,他们只会使问题复杂化。顺便说一下,为什么你的课程与核心课程同名?如果那个编译(我猜它确实如此),那对所有人来说都是非常困惑的。
编辑:在你的链接中,这些类或接口都不是内在的,所以你已经错误地转录了它。再次,将每个类和接口放在自己的文件中。有时你会想要使用内部类,但这绝对不是其中之一。