thomas programar programación programacion orientada objetos libro lenguaje introducción fundamentos desde cómo con codigos cero java interface

programar - libro de programacion en java netbeans pdf



Java: Interfaz con nueva palabra clave ¿cómo es posible? (8)

En el código, no está creando una instancia de la interfaz. Más bien, el código define una clase anónima que implementa la interfaz y crea una instancia de esa clase.

El código es más o menos equivalente a:

public final class Document { private final class AnonymousContentVisitor implements ContentVisitor { public void onStartDocument() { throw new IllegalStateException(); } public void onEndDocument() { out.endDocument(); } public void onEndTag() { out.endTag(); inscopeNamespace.popContext(); activeNamespaces = null; } } private final ContentVisitor visitor = new AnonymousContentVisitor(); }

Estaba leyendo un código fuente de las bibliotecas de Java, y estoy confundido aquí;

Este código es de Document.java en la biblioteca jaxb, y ContentVisitor es una interfaz en el mismo paquete, ¿cómo podemos crear una instancia de interfaz con una palabra clave nueva? ¿No es eso ilegal?

public final class Document { . . private final ContentVisitor visitor = new ContentVisitor() { public void onStartDocument() { throw new IllegalStateException(); } public void onEndDocument() { out.endDocument(); } public void onEndTag() { out.endTag(); inscopeNamespace.popContext(); activeNamespaces = null; } }


En realidad, acaba de proporcionar la implementación de esta interfaz de forma anónima. Esto es bastante común y por supuesto posible. Mire aquí para más información.


Es la implementación de la interfaz en línea. Aquí la idea es hacer que el compilador genere una clase anónima que implemente la interfaz. Luego, para cada método definido en la interfaz, puede (opcionalmente) proporcionar un método con una firma adecuada que se utilizará como la implementación del método de la interfaz.

Es la nueva sintaxis de Oxygene, agregada al lenguaje para permitir a los programadores de Oxygene trabajar con estos eventos basados ​​en interfaz de forma muy parecida a como lo hacen los programadores de Java.


Es valido Se llama clase anónima. Mira aquí

Ya hemos visto ejemplos de la sintaxis para definir y crear instancias de una clase anónima. Podemos expresar esa sintaxis más formalmente como:

new class-name ( [ argument-list ] ) { class-body }

o:

new interface-name () { class-body }


Esa declaración en realidad crea una nueva clase anónima que implementa la interfaz ContentVisitor y luego su instancia para ese ámbito dado y es perfectamente válida.



Observe dónde se abren las llaves: está declarando un objeto interno (llamado anonymous class ) que implementa ContentVisitor y todos los métodos necesarios en el acto.