- PR -

Hashtable またはvectorの要素を生成/削除する時にeventの生成できるのでしょうか。

投稿者投稿内容
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-04-30 11:38
みなさん
お元気ですか
お久しぶりです。
また質問させていただきます。

Hashtable またはvectorの要素を生成/削除する時にeventの生成できるのでしょうか。

ご存知の方ご教授お願いします。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2002-04-30 22:44
はじめまして。
java.util.Vector, Hashtable にはそれ自身ではイベントを生成、通知することはできないはずです。必要ならサブクラスを作ってはどうでしょうか。
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2002-05-01 09:08
各イベントのインスタンスはコンテナ(JVM)が生成する物であって
プログラマが生成するという事はあまり無いのでは・・・と認識しています。

「イベントを発生させる」と言う考え方ではなくて、Kissingerさんも
おっしゃっているように、サブクラスを作るのもあるでしょうし、
Collectionフレームワークのインタフェースを実装した自前クラスを
作る方法も良いかと思います。

例えばインターフェースMapを実装した新しいクラスを作るとなると
以下のような感じでしょうか?
(あまり深く考えて書いてないのでおかしかったらスミマセン)

public class MyMap implements Map {
  private Map map_;

  public MyHashtable(){
    map_ = new Hashtable();
  }

  pubic void put(Object key,Object value){
    // なんらかの処理
    map_.put(key,value);
  }

  public Object get(Object key){
    // なんらかの処理
    return map_.get(key);
  }

  // 略
}

YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2002-05-01 09:10
すみません、上記コード間違ってました。

 コンストラクタ
 public MyHashtable() → public MyMap()

でした。訂正いたします。
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-05-01 11:32
頂きました!ご返答は!

Kissingerさん、YOU@ITさん
こんにちは
ご返答ありがとう御座います。

KissingerさんWrote:
>java.util.Vector, Hashtable にはそれ自身ではイベントを生成、通知することはできない>はずです。必要ならサブクラスを作ってはどうでしょうか。
やっぱりeventのinterfaceでさえないですね。

YOU@ITさんはご親切にもコードを示して下さったが、
書かれたコードとイベント(例えば、エベントリスナーとハンドら)の関係が
私には見えてこないです(こんな水準でごめんなさい!)
もうすこしお願いできましょうか。




isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-05-01 11:33
ごめんなさい!

YOU@ITさんの考え方は分かりました。
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2002-05-01 11:55
http://www.asahi-net.or.jp/~dp8t-asm/java/tips/Event.html
イベントをどうにかしたい場合にすべきことがすっきりまとめられていてわかりやすいです。

で、HashtableやVectorが変更されたときに何がしたいのかによりますが、
単純なことがしたいだけならYOU@ITさんの書かれたようなインターフェースを
備えた自分用のクラスを作ることで十分ではないでしょうか。

逆に、使いたいHashtable/Vectorに意味をもたせてあり、変化を捕まえていろいろと
行いたい場合(トリガーにして別の処理を行う、処理の判定が行われるなど)は
面倒でもイベントを設計したほうがいいのかなと思ったりもします。
この場合は、YOU@ITさんのソースの何らかの処理がイベントの生成になってくる
わけですね。
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-05-01 13:19
class EHashtable extends Hashtable {
private Vector listeners = new Vector();
public void addListener(EHashtableListener listener) {
listeners.add(listener);
}
public void removeListener(EHashtableListener listener) {
listeners.remove(listener);
}
public void put(Object key, Object value) {
for (int i=0; i<listeners.size(); i++) { ((EHashtableListener)listeners.get(i)).onPut(key, value); }
super.put(key, value);
}
:

こんなん?
まぁ、あとは同期に注意するぐらい、では。

スキルアップ/キャリアアップ(JOB@IT)