Java 扩展ArrayList以支持事件

Java 扩展ArrayList以支持事件,java,generics,arraylist,extends,Java,Generics,Arraylist,Extends,我试图扩展Java ArrayList以支持本例中所述的事件: 问题是java报告在以下行中“无法对非静态类型MyEvent进行静态引用”: public interface MyEventListener extends EventListener { public void myEventOccurred(MyEvent evt); } 我认为这与泛型有关,但我真的不知道如何解决这个问题。有人能帮我吗 以下是我想做的事情的全部来源: public class ArrayList&

我试图扩展Java ArrayList以支持本例中所述的事件:

问题是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
    }
}
公共类ArrayList扩展了java.util.ArrayList{
私有静态最终长serialVersionUID=1L;
//声明事件。它必须扩展EventObject。
公共类MyEvent扩展了EventObject{
私有静态最终长serialVersionUID=1L;
公共MyEvent(对象源){
超级(来源);
}
}
//声明侦听器类。它必须扩展EventListener。
//类必须实现此接口才能获取MyEvents。
公共接口MyEventListener扩展了EventListener{
public void myEventOccurred(MyEvent evt);//此处出错
}
}

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


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

正如其他用户所指出的,你可以在他们自己的文件中完成所有类和接口,这样你就不会有问题了——这是一种更好的方法。如果您打算使用内部类和接口,那么您需要声明它们
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
    }
}
公共类ArrayList扩展了java.util.ArrayList{
私有静态最终长serialVersionUID=1L;
//声明事件。它必须扩展EventObject。
公共静态类MyEvent扩展了EventObject{
私有静态最终长serialVersionUID=1L;
公共MyEvent(对象源){
超级(来源);
}
}
//声明侦听器类。它必须扩展EventListener。
//类必须实现此接口才能获取MyEvents。
公共静态接口MyEventListener扩展了EventListener{
public void myEventOccurred(MyEvent evt);//此处出错
}
}

将内部类设置为静态类
为什么要为自定义事件扩展ArrayListimplementation@mprabhat,这是由于正在构建的Android应用程序的设计要求。在同步多线程进程中,当ArrayList发生更改时,需要通知此android应用程序。我强烈建议不要为此使用静态内部类。他应该按照您的建议使用标准的独立类。1+以上-vote@HovercraftFullOfEels我并不提倡使用内部类,正如我在一开始所说的那样。但是,如果OP设置为使用它们,那么
静态
是解决他的问题的方法。@AleksG,非常感谢你的建议。我使用一个静态类测试了您的方法,它也可以工作。谢谢!你是对的!我没有注意到没有使用内部类!非常感谢你的建议!