7

リストが変更されたときにリッスンし、これが発生したときにアクションを実行できるように、JavaでArrayListの独自の実装を作成したいと考えています。私が読んだことから、ArrayListを拡張してリスナーを追加できないことを理解しています。

クラスで MyList をpublic修飾子付きの変数として使用したいので、ユーザーはそれを直接変更し、変更時にアクションを実行できます。

class MyList extends ArrayList<object>.... {  ... }
 class UseOfMyList {
 public MyList places = new MyList<Object>();
 places.add("Buenos Aires");
 //and to be able to do that
 List cities = new ArrayList<Object>();
 cities.add("Belmopan");
 places = cities;

では、どのように作成し、いつ別のリストを追加、削除、または MyList に渡してアクションを実行するのでしょうか?

4

3 に答える 3

13

ArrayList組み込みの通知メカニズムがないため (さらに、宣言されているためfinal拡張できないため)、 を拡張してもこれを行うことはできません。ただし、独自の実装を作成し、およびメソッドListに対して「リスナー」機能を追加することで、目的の結果を得ることができます。add()remove()

class MyList<T>{
    private ArrayList<T> list;

    public MyList(){
        list = new ArrayList<>();
        ...
    }
    public void add(T t){
        list.add(t) 
        //do other things you want to do when items are added 
    }
    public T remove(T t){
        list.remove(t);
        //do other things you want to do when items are removed
    }
}
于 2013-05-13T19:13:27.253 に答える
0

担当者。;)

private class MyList extends ArrayList<Objects> {

      @Override
      public void sort(Comparator c) {
        super.sort(c); 
        resetLancamentos(); // call some metod ;)
      }
    //...
     @Override
     public boolean removeAll(Collection c) {
        //To change body of generated methods, choose Tools | Templates.
        boolean ret = super.removeAll(c);
        resetLancamentos(); // some metod like fireObjChanged() will do the job too
         return ret;
     }

}
于 2016-01-16T00:35:22.020 に答える