2011-01-23 3 views
10

¿Puede una clase anónima declarar sus propios parámetros de tipo?En Java, ¿puede una clase anónima declarar sus propios parámetros de tipo?

+1

¿Podría mostrar algún código (pseudo) para aclarar su pregunta? –

+0

Puede escribir el código para probar esto en <30 segundos y responder su propia pregunta. –

+0

No creo que sea posible, así que no hay sintaxis para eso. Pero, algo así como: 'MyInterface m = new MyInterface() {/ * body * /};' –

Respuesta

9

Tienes razón, no es posible. Como una clase anónima debe usarse solo una vez, ¿cuál sería el sentido de agregarle parámetros de tipo que nunca podrá usar/heredar? No puede crear una instancia de una clase anónima más de una vez desde cualquier otra ubicación de código que la que lo define, y tampoco puede crear una subclase.

+0

Esto es lo que pensé. Gracias. –

+1

En realidad, uno puede crear instancias de una clase anónima arbitrariamente muchas veces, al ejecutar de nuevo la expresión de creación de instancia de clase. – meriton

+1

Uno podría querer usar los parámetros de tipo en el cuerpo de la clase anónima ... – meriton

5

No. The Java Language Specification define exhaustivamente los posibles argumentos a una expresión creación de la instancia de clase como sigue:

Una creación instancia de clase expresión especifica una clase para ser instanciada, posiblemente seguido de argumentos de tipo (si la clase que se está instanciando es genérica (§8.1.2)), seguida por (una lista posiblemente vacía) argumentos de valor real al constructor. Es también es posible pasar argumentos explícitos del tipo al propio constructor (si es un constructor genérico (§8.8.4)). Los argumentos de tipo para el constructor siguen inmediatamente la palabra clave new. Es un error en tiempo de compilación si alguno de los argumentos de tipo utilizados en una expresión de creación de instancia de clase son argumentos de tipo comodín (§4.5.1). creación de la instancia de clase expresiones tienen dos formas:

  • clase no calificado de creación de instancias expresiones comienzan con la palabra clave nueva. Una expresión de creación de instancia de clase no calificada se puede usar para crear una instancia de una clase, independientemente de si la clase es un nivel superior (§7.6), miembro (§8.5, §9.5), local (§14.3) o clase anónima (§15.9.5).

  • Creación de instancia de clase habilitada Las expresiones comienzan con una primaria. Una expresión de creación de instancia de clase calificada expresión permite la creación de instancias de clases de miembro internas y sus subclases anónimas.

Así, mientras que se pueden especificar los parámetros de tipo real de la super clase o interfaz, o el constructor, no se puede definir otras nuevas. Mientras Concedo que esto podría ser útil en algunos casos raros (porque el nuevo parámetro de tipo podría ser utilizado desde el cuerpo de la clase), hay fácil solución para que:

  • colocar la expresión de creación de instancias de clases en un método genérico (la clase anónima verá parámetro de tipo del método de cerco)
  • utiliza una clase llamada
+0

Buenas soluciones. +1 –

2

embargo, hay una manera de utilizar los parámetros.

Cualquier método declarado dentro de la clase anónima puede utilizar los

  • propiedades de la clase externa final
  • parámetros del método y método final
  • variables de

el siguiente código demostrar que

public class Foo 
{ 

    private String value = "Hello "; 

    public void anonymousTest(final boolean asc) 
    { 
     final String world = "world"; 

     new Comparable<String>() 
     { 
      @Override 
      public int compareTo(String o) 
      { 
       System.out.println(value + world); 
       int cmp = value.compareTo(o); 
       return asc ?cmp :0-cmp; 
      } 
     }; 
    } 
} 

Espero que el ejemplo ayude.

Cuestiones relacionadas