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

Resuelto Bittercoder asked hace 15 años • 6 respuestas

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; en cualquier caso, he estado trabajando en un pequeño proyecto de Java esta semana y usando Intellij IDEA como mi IDE. , para cambiar el ritmo de mi desarrollo habitual de .Net.

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

public interface Test {
}

vs.

public @interface Test {
}

He buscado un poco, pero no pude encontrar mucha información útil referente a @interface.

Bittercoder avatar May 28 '09 06:05 Bittercoder
Aceptado

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

Eso significa que no es realmente una interfaz, sino más bien un nuevo tipo de anotación, que se utilizará como modificador de función, como @override .

Vea esta entrada de javadocs sobre el tema.

mrkishi avatar May 27 '2009 23:05 mrkishi

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 está definida por la clase o tipo que implementa la interfaz.

@interface: (tipo de anotación)

Tomemos 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, puedes 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

mavis avatar Feb 19 '2014 07:02 mavis

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

Consulte el tutorial de docs.oracle sobre anotaciones para obtener una descripción de la sintaxis.
Consulte el JLS si realmente desea entrar en detalles sobre lo que @interfacesignifica.

DavidValeri avatar May 27 '2009 23:05 DavidValeri

interface: define el contrato para una clase que lo implementa

@interface:define el contrato para una anotación

Emmanuel Osimosu avatar Sep 05 '2017 07:09 Emmanuel Osimosu

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

@interface se utiliza para crear sus propias anotaciones Java (personalizadas). Las anotaciones se definen en su propio archivo, como una clase o interfaz Java. A continuación se muestra 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.

Observe que cada elemento se define de manera similar a la definición de un método en una interfaz. Tiene un tipo de datos 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, puedes 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/annotations.html

Piyush Singh avatar Feb 15 '2019 11:02 Piyush Singh