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

より複雑な解決策とより単純な解決策があります。より単純なもの: ここでは内部クラスまたはインターフェースを使用しないでください。単に必要がなく、問題を複雑にするだけです。余談ですが、なぜクラスにコアクラスと同じ名前が付けられているのですか? それがコンパイルされた場合 (そして、私はそれがコンパイルされると推測しています)、すべての人にとって非常に混乱します。

編集:そしてあなたのリンクでは、これらのクラスやインターフェースはどれも内部にあることを意図していないので、間違って転記しました。ここでも、各クラスとインターフェースを独自のファイルに入れます。内部クラスを使用したい場合もありますが、これは間違いなくその 1 つではありません。

于 2012-06-10T16:47:18.283 に答える