- - PR -
Hashtable またはvectorの要素を生成/削除する時にeventの生成できるのでしょうか。
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2002-04-30 11:38
みなさん
お元気ですか お久しぶりです。 また質問させていただきます。 Hashtable またはvectorの要素を生成/削除する時にeventの生成できるのでしょうか。 ご存知の方ご教授お願いします。 |
|
投稿日時: 2002-04-30 22:44
はじめまして。
java.util.Vector, Hashtable にはそれ自身ではイベントを生成、通知することはできないはずです。必要ならサブクラスを作ってはどうでしょうか。 |
|
投稿日時: 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); } // 略 } |
|
投稿日時: 2002-05-01 09:10
すみません、上記コード間違ってました。
コンストラクタ public MyHashtable() → public MyMap() でした。訂正いたします。 |
|
投稿日時: 2002-05-01 11:32
頂きました!ご返答は!
Kissingerさん、YOU@ITさん こんにちは ご返答ありがとう御座います。 KissingerさんWrote: >java.util.Vector, Hashtable にはそれ自身ではイベントを生成、通知することはできない>はずです。必要ならサブクラスを作ってはどうでしょうか。 やっぱりeventのinterfaceでさえないですね。 YOU@ITさんはご親切にもコードを示して下さったが、 書かれたコードとイベント(例えば、エベントリスナーとハンドら)の関係が 私には見えてこないです(こんな水準でごめんなさい!) もうすこしお願いできましょうか。 |
|
投稿日時: 2002-05-01 11:33
ごめんなさい!
YOU@ITさんの考え方は分かりました。 |
|
投稿日時: 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さんのソースの何らかの処理がイベントの生成になってくる わけですね。 |
|
投稿日時: 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); } : こんなん? まぁ、あとは同期に注意するぐらい、では。 |
