Javaでinterfaceを実装する際に、全ての抽象メソッドは実装したくない

ソフトウェアを作る際に、よくお世話になるインターフェースとして
「MouseListener」や「DropTargetListener」などがありますが、
これらを実装すると、全ての抽象メソッドを実装しなければなりません。

「MouseListener」の場合は
・void mouseClicked(MouseEvent e)
・void mouseEntered(MouseEvent e)
・void mouseExited(MouseEvent e)
・void mousePressed(MouseEvent e)
・void mouseReleased(MouseEvent e)
の5つ。

「DropTargetListener」の場合は
・void dragEnter(DropTargetDragEvent dtde)
・void dragExit(DropTargetEvent dte)
・void dragOver(DropTargetDragEvent dtde)
・void drop(DropTargetDropEvent dtde)
・void dropActionChanged(DropTargetDragEvent dtde)
の5つ。

結構あります。
そして、私の場合このうちの幾つかは毎度毎度実装のみで使いません。
例えば「DropTargetListener」の場合、私は「drop()メソッド」くらいしか使わないことはほとんどです。

使わないのに実装して、ソースコードが長くなるのがなんとなく嫌だったので、
全ての抽象メソッドを実装しない(ように見せかける)方法のメモです。

いろいろ試行錯誤しましたが、結局インターフェースの抽象メソッドを実装するためだけのクラスを作って、
それを継承するという方法に落ち着きました。

「DropTargetListener」「MouseListener」「MouseMotionListener」の3つのインターフェースを実装し、
「JCmponent」クラスを継承したクラス「DropTargetPanel.java」の例です。

この「DropTargetPanel」クラスを継承させることで、
目的の抽象メソッドのみを見かけ上実装することができました。

また、「MouseListener」や「MouseMotionListener」は、
新しいクラスを用意しなくても、次のような命令をコンストラクタで書いても実現できました。

「formMouseMoved()」メソッドを外部に書き、上記のような宣言の命令群をまとめて隠すことで、なんとなくスッキリ・・・するかもしれません。


コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">