2009-02-25 6 views
41

Acabo de descubrir esta característica.uso de declaración predeterminada de interfaz en Java

Declarar una interfaz utilizando la sintaxis "@interface" le permite poner un valor predeterminado.

public @interface HelloWorld { 
    public String sayHello() default "hello world"; 
} 

Esto es algo nuevo para mí. ¿Cómo se supone que se usará ese valor predeterminado?

No puedo encontrar referencias a que, debido a la WWW está llena de documentos interfaz Java antes de la "@" Además en Java 1.5 (estaba en 0.5 o en 0.4?)


EDITAR

Gracias por las respuestas (de alguna manera estaba cerca de "anotación", porque yo utilizo la etiqueta ya): P

sabía que tenía que haber leído hace años que los documentos .. !!! le t's ver ...

Muchas API requieren una buena cantidad de código repetitivo. Para ...

+2

Y no debe confundirse con los métodos de interfaz predeterminados de Java 8: http://java.dzone.com/articles/interface-default-methods-java –

Respuesta

55

Acaba de escribir annotation.

En particular, la declaración default: se utiliza porque las anotaciones y las interfaces no pueden tener constructores, por lo que esta es la única forma de tener un valor predeterminado para un atributo de anotación. De Java Language Specification:

Un elemento de tipo de anotación puede tener un valor predeterminado especificado para él. Esto se hace siguiendo su lista de parámetros (vacía) con la palabra clave default y el valor predeterminado del elemento.

Los valores predeterminados se aplican dinámicamente en el momento en que se leen las anotaciones; los valores predeterminados no se compilan en anotaciones. Por lo tanto, cambiar un valor predeterminado afecta a las anotaciones incluso en las clases que se compilaron antes de realizar el cambio (suponiendo que estas anotaciones carecen de un valor explícito para el elemento predeterminado).

Observo que ninguna de las anotaciones en java.lang.annotation usa valores predeterminados.


Uso: Tienes una anotación @HelloWorld con un atributo sayHello. Se puede poner en una clase como esta:

@HelloWorld(sayHello="Hi") 
public class MyClass { 
} 

Puesto que usted tiene un valor por defecto, sólo podría poner

@HelloWorld 
public class MyClass { 
} 

(Tenga en cuenta que el documento dice: "En las anotaciones con un solo elemento, el elemento debe llamarse value "; creo que la única razón para hacerlo es que simplemente puede escribir @HelloWorld("Hi") sin tener que nombrar el parámetro.)

Como está escrito, su anotación se puede utilizar en cualquier elemento de programa válido (incluidos métodos y declaraciones de variables). Puede cambiar esto con la anotación @Target.

Finalmente, establecer RetentionPolicy le permite decidir si la anotación debe ser descartada por el compilador, descartada por la máquina virtual o guardada siempre.


Dos paquetes que también pueden ser interesantes: javax.annotation y javax.annotation.processing. Y here es un ejemplo del uso del proceso de anotación para el análisis del código fuente.

+1

+1: Gracias mmyers: ¿Tiene algún resumen de este vago? ¿programador? – OscarRyz

+0

Resumen de qué? ¿Todos los usos de las anotaciones? –

+1

No, solo del uso @interface ... Consultaré el enlace ... más adelante: -/ – OscarRyz

4

Eso es un annotation que no declara una interfaz. Fue agregado en Java 1.5.

+0

+1. Oh ... sí, la anotación. Creo que desecho la conferencia para aquellos cuando dije "Cuando necesito crear una herramienta de procesamiento de anotaciones, llegaré a eso" Hoy estaba viendo el código de Groovy Source y eso fue lo primero que me dejó perplejo. – OscarRyz

Cuestiones relacionadas