Java 扩展ArrayList以支持事件
我试图扩展Java ArrayList以支持本例中所述的事件: 问题是java报告在以下行中“无法对非静态类型MyEvent进行静态引用”: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&
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,非常感谢你的建议。我使用一个静态类测试了您的方法,它也可以工作。谢谢!你是对的!我没有注意到没有使用内部类!非常感谢你的建议!