¿Cuál es la diferencia entre interfaz e @interface en java?

5 minutos de lectura

avatar de usuario
codificador amargo

No he tocado Java desde que usé JBuilder a finales de los 90 mientras estaba en la universidad, así que estoy un poco fuera de contacto; de todos modos, he estado trabajando en un pequeño proyecto de Java esta semana y uso Intellij IDEA como mi IDE. , para un cambio de ritmo de mi desarrollo regular de .Net.

Noté que tiene soporte para agregar interfaces e @interfaces, ¿qué es una @interface y en qué se diferencia de una interfaz normal?

public interface Test {
}

contra

public @interface Test {
}

Investigué un poco, pero no pude encontrar mucha información útil sobre @interface.

los @ El símbolo denota una definición de tipo de anotación.

Eso significa que es no realmente una interfaz, sino más bien un nuevo tipo de anotación, para ser utilizado como un modificador de función, como @anular.

Mira esto entrada de javadocs sobre el tema.

  • Genial gracias, es bueno saberlo. Entonces, ¿cuál fue la razón para llamarlo @interfaz, en lugar de decir @anotación? Me pregunto… parece un término innecesariamente sobrecargado.

    – Codificador amargo

    27 de mayo de 2009 a las 23:46

  • El tutorial y el JLS aluden a que una anotación es un tipo especial de interfaz. No parece haber mucha discusión sobre el tema, pero javarunner.blogspot.com/2005/01/annotations-in-java-15.html explica que las anotaciones son una extensión implícita de la interfaz de anotación y @ y la interfaz se usan para diferenciarse de una interfaz normal. También es posible que desee leer la especificación JSR para las anotaciones.

    – David Valeri

    28 de mayo de 2009 a las 11:41

  • @Bittercoder los documentos mencionan: “la interfaz de palabras clave está precedida por el signo de arroba (@) (@ = AT, como en el tipo de anotación)”. Esa es toda la razón que puedo encontrar para nombrar.

    – Shaishav

    6 de septiembre de 2017 a las 3:41

  • En realidad, la pregunta de Bittercoder es bastante inevitable, y el enlace de DavidValeri la explica muy bien. Entonces, puedes escribir así: @ interfaceno solo @interface.

    – estrellado

    11 de diciembre de 2020 a las 3:27

avatar de usuario
tordo músico

interfaz:

En general, una interfaz expone un contrato sin exponer los detalles de implementación subyacentes. En la programación orientada a objetos, las interfaces definen tipos abstractos que exponen el comportamiento, pero no contienen lógica. La implementación se define por la clase o el tipo que implementa la interfaz.

@interfaz: (tipo de anotación)

Tome el siguiente ejemplo, que tiene muchos comentarios:

public class Generation3List extends Generation2List {

   // Author: John Doe
   // Date: 3/17/2002
   // Current revision: 6
   // Last modified: 4/12/2004
   // By: Jane Doe
   // Reviewers: Alice, Bill, Cindy

   // class code goes here

}

En lugar de esto, puede declarar un tipo de anotación

 @interface ClassPreamble {
   String author();
   String date();
   int currentRevision() default 1;
   String lastModified() default "N/A";
   String lastModifiedBy() default "N/A";
   // Note use of array
   String[] reviewers();
}

que luego puede anotar una clase de la siguiente manera:

@ClassPreamble (
   author = "John Doe",
   date = "3/17/2002",
   currentRevision = 6,
   lastModified = "4/12/2004",
   lastModifiedBy = "Jane Doe",
   // Note array notation
   reviewers = {"Alice", "Bob", "Cindy"}
)
public class Generation3List extends Generation2List {

// class code goes here

}

PD:
Muchas anotaciones reemplazan los comentarios en el código.

Referencia: http://docs.oracle.com/javase/tutorial/java/annotations/declaring.html

  • Eso fue realmente útil. No sabía que Java podía hacer esto.

    – Jay Sidri

    29 de agosto de 2016 a las 5:53

  • La respuesta anterior incluía este enlace, de donde provino esta información. Me resultó útil encontrar más información sobre este tema. docs.oracle.com/javase/tutorial/java/annotations/declaring.html

    – PatS

    11 de noviembre de 2018 a las 1:50


  • No estoy seguro de por qué a todos les encanta esta respuesta, mientras que ofrece un caso de uso muy limitado de las anotaciones. La anotación en Java se usa para muchas más cosas que simplemente reemplazar los comentarios. El poder de las anotaciones radica en el hecho de que pueden cambiar la forma en que los elementos anotados se comportan o se procesan en el tiempo de ejecución.

    – Leonid Usov

    20 de agosto de 2020 a las 15:33

avatar de usuario
davidvaleri

los interface La palabra clave indica que está declarando una clase de interfaz tradicional en Java.
los @interface La palabra clave se utiliza para declarar un nuevo tipo de anotación.

Ver tutorial de docs.oracle en anotaciones para una descripción de la sintaxis.
Ver el JLS si realmente quieres entrar en los detalles de lo que @interface medio.

avatar de usuario
emmanuel osimosu

interface: define el contrato para una clase que lo implementa

@interface: define el contrato para una anotación

interfaz
en el lenguaje de programación Java es un tipo abstracto que se usa para especificar un comportamiento que las clases deben implementar. Son similares a los protocolos. Las interfaces se declaran usando la palabra clave de interfaz

@interfaz
se utiliza para crear sus propias anotaciones Java (personalizadas). Las anotaciones se definen en su propio archivo, al igual que una clase o interfaz de Java. Aquí hay un ejemplo de anotación Java personalizada:

@interface MyAnnotation {

    String   value();

    String   name();
    int      age();
    String[] newNames();

}

Este ejemplo define una anotación llamada MyAnnotation que tiene cuatro elementos. Observe la palabra clave @interface. Esto le indica al compilador de Java que se trata de una definición de anotación de Java.

Tenga en cuenta que cada elemento se define de manera similar a una definición de método en una interfaz. Tiene un tipo de dato y un nombre. Puede utilizar todos los tipos de datos primitivos como tipos de datos de elementos. También puede utilizar matrices como tipo de datos. No puede utilizar objetos complejos como tipo de datos.

Para usar la anotación anterior, podría usar un código como este:

@MyAnnotation(
    value="123",
    name="Jakob",
    age=37,
    newNames={"Jenkov", "Peterson"}
)
public class MyClass {


}

Referencia – http://tutorials.jenkov.com/java/anotaciones.html

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad