2011-05-04 11 views
9

me encontré con algo así como¿Qué es el creador interno (objectinstance.new) en Java?

ArgProcessor argProcessor = runWebApp.new ArgProcessor(options); 

Esta línea es de la fuente de GWT. Al profundizar en la gramática de Java, descubrí que es (".new") creador interno.

Pero no encontré ninguna documentación adecuada sobre por qué necesitamos exactamente el creador interno.

¿Cómo se diferencia esto de un creador de objeto/instancia normal?

Respuesta

4

Es para crear un objeto del tipo de clase interna.

por ejemplo: Buscar en este

http://www.javabeat.net/tips/124-inner-classes-in-java.html

es decir:

class Outer{ 

    final int z=10; 

    class Inner extends HasStatic { 
    static final int x = 3; 
    static int y = 4; 
    } 

    public static void main(String[] args) { 
    Outer outer=new Outer(); 
    System.out.println(outer.new Inner().y); 
    } 
} 
4

El new palabra clave en este ejemplo se denomina en el ámbito de la runWebApp ejemplo. Esto significa que runWebApp.class contiene una clase interna llamada ArgProcessor. Esta es la forma adecuada de especificar que está en la construcción ArgProcessor dentro de runWebApp, y que no llama a ninguna otra clase de nivel superior ArgProcessor.

Tenga en cuenta que la asignación externa tendrá una instancia de ArgProcessor, pero será runWebApp 's instancia de ArgProcessor, y no de alguna otra instancia ArgProcessor ejemplo. Ocasionalmente, esto se hace para simular una interfaz C++ friend de estilo antiguo entre clases; sin embargo, hay otras razones por las que esto podría hacerse. Básicamente, permite un enfoque de grano más fino que el estándar public, protected, default, private interfaces disponibles con el lenguaje de programación real.

0

Una clase interna es una clase definida en otra clase. Si no es estático, cada instancia de una clase interna tiene una referencia implícita a la instancia de la clase externa. Se puede acceder desde dentro de la clase interna de esta manera: OuterClass.this.

lo tanto, cuando se instancia la clase interna InnerClass de un método no estático de la instancia outerObject de la clase externa OuterClass, la instancia creada innerObject tiene una referencia implícita a outerObject. Pero cuando desee hacer lo mismo desde algún lugar fuera de OuterClass (o desde un método estático), debe especificar la instancia de OuterClass a la que hará referencia: lo hace llamando al new en la instancia de la clase externa.