1

我正在尝试扩展 Java ArrayList 以支持此示例中描述的事件: http ://www.exampledepot.com/egs/java.util/CustEvent.html

问题是 java 在以下行中报告“无法对非静态类型 MyEvent 进行静态引用”

public interface MyEventListener extends EventListener {
    public void myEventOccurred(MyEvent evt);
}

我认为这与泛型有关,但我真的不知道如何解决这个问题。有人可以帮助我吗?

这是我正在尝试做的全部来源:

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
    }
}
4

2 回答 2

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
    }
}
于 2012-06-10T16:48:01.433 回答
1

有一个更复杂的解决方案和一个更简单的解决方案。更简单的一个:不要在这里使用内部类或接口;根本没有必要,它们只会使事情复杂化。顺便说一句,为什么您的课程与核心课程的名称相同?如果这样编译(我猜是这样),那么所有人都会感到非常困惑。

编辑:在你的链接中,这些类或接口都不是内部的,所以你抄错了。同样,将每个类和接口放在自己的文件中。有时您会想要使用内部类,但这绝对不是其中之一。

于 2012-06-10T16:47:18.283 回答