Estoy tratando de diferenciar entre los oyentes y los adaptadores.

Son básicamente los mismos, pero en los oyentes que tienen que implementar todos los métodos de la interfaz, pero con adaptadores usted tiene una opción para implementar los métodos que usted necesita para que el código es limpiadores y más fácil de leer?

Yo también tengo dicho que los adaptadores permiten la creación de instancias con sólo una aplicación y no se puede crear oyentes, no entiendo esto.

Por favor alguien puede explicar que es el mejor para su uso y las cosas que usted puede hacer con uno, pero no se puede con el otro?

InformationsquelleAutor orange | 2012-05-06

5 Comentarios

  1. 31

    WindowListener es interface que te obligan a override todos los métodos, mientras que WindowAdapter es la aplicación de WindowListener y sólo necesita override el método(s) que usted interés a tratar.

    WindowListener es la interfaz que significa que no puede la creación de instancias de la WindowListener, mientras que WindowAdapter se concreta en la clase que usted puede utilizar new operador de creación de instancias.

    Cuando se utiliza WindowAdapter, el código es más limpio, donde su clase sólo reemplazar el método(s) que desee.
    Por ejemplo:

    WindowListener

    public class CloseListener implements WindowListener {
        //im not interest  on this event, but still need to override it
        @Override
        public void windowOpened(WindowEvent e) {
    
        }
        //im not interest  on this event, but still need to override it    
        @Override
        public void windowClosing(WindowEvent e) {
    
        }
    
        @Override
        public void windowClosed(WindowEvent e) {
            System.exit(0);
    
        }
        //im not interest  on this event, but still need to override it    
        @Override
        public void windowIconified(WindowEvent e) {
    
        }
        //im not interest  on this event, but still need to override it
        @Override
        public void windowDeiconified(WindowEvent e) {
    
        }
    
    }

    WindowAdapter

    Mientras utiliza el adaptador de que el código es más limpio:

    //at JFrame class
    addWindowListener(new CloseListener());
    
    //reusable Close Listener
    public class CloseListener extends WindowAdapter {
        @Override
        public void windowClosed(WindowEvent e) {
            System.exit(0);
        }
    }

    O

    addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosed(WindowEvent e) {
             System.exit(0);
         }
    });

    Así que yo recomendaría usar WindowAdapter, pero no debe seguir. Sin embargo, dos de la API sobre la misma sólo que WindowAdapter existe como conveniencia para la creación de objetos de escucha.

    EDICIÓN:

    Desde WindowListener es interface, usted puede ponerlo en práctica en su subclase de JFrame.

    public class MainWindow extends JFrame implements WindowListener {
        //this is ok
    }
    public class MainWindow extends JFrame, WindowAdapter {
        //this is not allow
    }

    Pero no puedo hacerlo con WindowAdapter.

    • Gracias. ¿También la mente que me permite saber lo que significa » adaptadores permiten la creación de instancias con sólo una aplicación y no se puede crear de los oyentes
    • el oyente de la interfaz general es sólo eso – una interfaz – de modo que usted no puede crear un nuevo oyente, usted necesita para crear una nueva instancia de alguna clase que implementa esta interfaz. adaptadores, por otro lado, puede ser instanciada directamente (si no están resumen) – pero por lo general no hacen nada por defecto, de modo que en realidad no hay caso de uso para la creación de ellos
    • Gracias una muy buena respuesta. Todavía no lo consigo por qué se quiere crear una instancia de un adaptador de clase. Ejemplos de cuando esto se lleva a cabo va a ser útil. 🙂
    • Podría tener sentido si usted está utilizando el adaptador/oyente para registrar a varios objetos. Así que usted podría, por ejemplo, tener una KeyAdapter que sólo refresca algo. Y desea que el comportamiento en varios JTextFields o así… Entonces usted puede crear una instancia y addKeyListener(...) esa instancia, todos ellos en lugar de crear varias anónimo versiones. Aunque no estoy exactamente seguro de lo que Pau Kiat Wee significaba con su declaración…
  2. 8

    Usted puede hacer todo con cualquiera, pero si usted comienza con la interfaz, el código va a tener un MONTÓN de repetitivo. Estoy seguro que has notado que cuando lo probé. Esa declaración acerca de la creación de instancias etc. es una forma enrevesada de decir y hay una gran confusión de términos. Usted puede escribir

    c.addWindowListener(new WindowListener() {
      @Override public void windowActivated(WindowEvent arg0) { }
      @Override public void windowClosed(WindowEvent arg0) { System.exit(0); }
      @Override public void windowClosing(WindowEvent arg0) { }
      @Override public void windowDeactivated(WindowEvent arg0) { }
      @Override public void windowDeiconified(WindowEvent arg0) { }
      @Override public void windowIconified(WindowEvent arg0) { }
      @Override public void windowOpened(WindowEvent arg0) { }
    });

    o puede escribir

    c.addWindowListener(new WindowAdapter() {
      @Override public void windowClosed(WindowEvent arg0) { System.exit(0); }
    });

    En ninguno de los casos se le instancias de ya sea WindowListener o WindowAdapter—está creando anónimo clases que implementan WindowListener/ampliar WindowAdapter. Pero a la hora de implementar la interfaz directamente, se ve obligado a implementar todos los métodos, mientras que al extender el adaptador de clase, sólo puede anular lo que usted necesita. La clase ya tiene exactamente estos vacíos implementaciones de que había que escribir en el Listener caso.

    • después de editar mejor respuesta
    • Yo creo que tu segundo ejemplo de código significa para crear una instancia de WindowAdapter y no WindowListener
    • Esta es la única respuesta que se borra mi comprensión de la diferencia! Muchas gracias!
  3. 0

    Hay varios Adaptador de clases, tales como la MouseAdapter, KeyAdapter, WindowAdapter que se puede extender evitando así la escritura de los métodos que usted no la realidad necesita.

    La cosa con interfaces es que usted tiene que escribir todos los métodos que usted no necesita. El Adaptador de clase pueden ser Sub Clasificado como una manera de reemplazar el método requerido.

    http://www.cafeaulait.org/course/week7/19.html

  4. 0

    Oyentes se utiliza cuando se planea utilizar la mayoría de los métodos de interfaz. Cuando usted necesita para utilizar sólo algunos de los métodos de un adaptador sería mejor b/c que no tendría reemplazar el resto de los métodos.

  5. 0

    Hay otro aspecto que no se aborda en otras respuestas: API de evolución. Proporcionar adaptador de clases (un.k.un vacío o defecto de las implementaciones de las interfaces) hace que la introducción de los nuevos métodos de las interfaces de menos doloroso. Si una API proporciona sólo las interfaces, a continuación, los clientes están obligados a aplicarlas y si se agrega un método nuevo para las interfaces, a continuación, toda la implementación de las clases se va a romper. Sin embargo, si implementaciones predeterminadas se proporcionan a continuación, los clientes tienen la oportunidad de ampliar esas lugar que, además de ser conveniente, les ayuda a actualizar a la más reciente versión de la API. Con métodos predeterminados de Java 8 default/vacío implementación se han vuelto menos importantes, pero puede ser útil en las versiones anteriores.

Dejar respuesta

Please enter your comment!
Please enter your name here