请问一下空接口的好处是什么?适用于什么范围啊?谢谢~

05-12-28 贾飞
经常看到空接口 可是不知道其设计的好处 什么时候可以借鉴~ 谢谢~

mythmoon
2005-12-28 20:52
空接口?接口本来就不是自己实现的啊!

banq
2005-12-29 09:42
象太极拳

blueoxygen
2005-12-29 11:10
可以当作一个标识。虽然不做任何实现,但是标志了这个类的一个特点和将来可能有的行为。

比如序列化接口。

chenyongguang
2005-12-29 15:01
举个具体的例子,比如在应用中我们经常要处理一些事件Event,事件可以有键盘事件KeyEvent、鼠标事件MouseEvent、文本事件TextEvent等等。很明显这些事件一般没有统一的处理方法,,那么需要可以定义相应的事件监听器Listener来处理。不同事件交给不同的事件监听器去监听(捕获)并处理,比如鼠标事件监听器定义如下:

public interface MouseListener extends EventListener {

/**

* Invoked when the mouse button has been clicked (pressed

* and released) on a component.

*/

public void mouseClicked(MouseEvent e);

/**

* Invoked when a mouse button has been pressed on a component.

*/

public void mousePressed(MouseEvent e);

/**

* Invoked when a mouse button has been released on a component.

*/

public void mouseReleased(MouseEvent e);

/**

* Invoked when the mouse enters a component.

*/

public void mouseEntered(MouseEvent e);

/**

* Invoked when the mouse exits a component.

*/

public void mouseExited(MouseEvent e);

};

键盘事件监听器定义如下:

public interface KeyListener extends EventListener {

/**

* Invoked when a key has been typed.

* See the class description for {@link KeyEvent} for a definition of

* a key typed event.

*/

public void keyTyped(KeyEvent e);

/**

* Invoked when a key has been pressed.

* See the class description for {@link KeyEvent} for a definition of

* a key pressed event.

*/

public void keyPressed(KeyEvent e);

/**

* Invoked when a key has been released.

* See the class description for {@link KeyEvent} for a definition of

* a key released event.

*/

public void keyReleased(KeyEvent e);

}

而EventListener定义如下(典型的空接口):

/**

* A tagging interface that all event listener interfaces must extend.

* @since JDK1.1

*/

public interface EventListener {

};

可见,EventListener表明它要对事件进行监听,但由于事件类型各异,没有统一的处理方式,故用空接口表明它要监听各类事件,而具体事件(比如鼠标事件MouseEvent)的监听和处理方式交给具体子类(比如鼠标事件监听器MouseEventListener)去处理。

不知这样回答是否正确,请大家指教。

猜你喜欢
3Go 1 2 3 下一页