Java'da interface ve @interface arasındaki fark nedir?


306

Üniversitede iken 90'ların sonunda JBuilder kullandığımdan beri Java'ya dokunmadım, bu yüzden biraz temasım yok - her halükarda bu hafta küçük bir Java projesi üzerinde çalışıyorum ve IDE'm olarak Intellij IDEA kullanıyorum , düzenli .Net gelişimimden bir hız değişikliği için.

Arayüz ve @ arayüz ekleme desteği olduğunu fark ettim, @ arayüz nedir ve normal arayüzden farkı nedir?

public interface Test {
}

vs.

public @interface Test {
}

Biraz arama yaptım, ancak @interface'e atıfta bulunan çok fazla yararlı bilgi bulamadım.

Yanıtlar:


322

@ Sembolü bir açıklama türü tanımı belirtmektedir.

Bu, aslında bir arayüz değil , daha ziyade @override gibi bir işlev değiştirici olarak kullanılacak yeni bir ek açıklama türü olduğu anlamına gelir .

Konuyla ilgili bu Javadocs girişine bakın .


7
Çok teşekkürler, bilmek güzel. Peki @interface olarak adlandırmanın mantığı neydi, o zaman @annotation diyorum ki .. gereksiz yere aşırı yüklenmiş bir terim gibi görünüyor.
Bittercoder

5
Öğretici ve JLS, özel bir arayüz türü olan bir ek açıklama anlamına gelir. Konu hakkında çok fazla tartışma yok gibi görünüyor, ancak javarunner.blogspot.com/2005/01/annotations-in-java-15.html , ek açıklamaların Ek Açıklama arayüzünün ve @ ve arayüzünün örtülü bir uzantısı olduğunu açıklıyor birlikte düzenli bir arayüzden ayırmak için kullanılır. Ek açıklamalar için JSR spesifikasyonunu da okumak isteyebilirsiniz.
DavidValeri

1
@Bittercoder belgelerinden bahsediyor: "anahtar kelime arayüzünden önce @ işareti (@) (ek açıklama türünde olduğu gibi) at"). Tüm mantık bu wrt adlandırma bulabilirsiniz.
Shaishav

112

arayüz:

Genel olarak, bir arayüz temel uygulama detaylarını göstermeden bir sözleşme yapar. Nesneye Yönelik Programlamada, arabirimler davranışı ortaya çıkaran, ancak mantık içermeyen soyut türleri tanımlar. Uygulama, arabirimi uygulayan sınıf veya tür tarafından tanımlanır.

@interface: (Ek açıklama türü)

Çok sayıda yorumu olan aşağıdaki örneği alın:

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

}

Bunun yerine bir ek açıklama türü bildirebilirsiniz

 @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();
}

daha sonra aşağıdaki gibi bir sınıfa açıklama ekleyebilir:

@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

}

Not: Birçok ek açıklama koddaki yorumları değiştirir.

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


11
güzel açıklama
Pat B

2
Aslında faydalıydı. Java'nın bunu yapabileceğini bilmiyordum.
Jay Sidri

Önceki cevap, bu bilgilerin geldiği yer olan bu bağlantıyı içeriyordu. Bu konu hakkında daha fazla bilgi bulmayı yararlı buldum. docs.oracle.com/javase/tutorial/java/annotations/declaring.html
PatS

1
Stackoverflow tanık olduğum en iyi ve tam cevaplar (henüz açık) biri.
Bay D

32

interfaceAnahtar kelime, Java geleneksel arayüz sınıfını ilan olduğunu gösterir. Anahtar kelime yeni açıklama türü bildirmek için kullanılır.
@interface

Sözdiziminin açıklaması için ek açıklamalar hakkında docs.oracle eğitimine bakın . Gerçekten ne anlama geldiğinin ayrıntılarına girmek istiyorsanız JLS'ye
bakın .@interface


18

interface: onu uygulayan bir sınıf için sözleşmeyi tanımlar

@interface: ek açıklama için sözleşmeyi tanımlar


8

Java programlama dilinde arabirim , sınıfların uygulaması gereken bir davranışı belirtmek için kullanılan soyut bir türdür. Protokollere benzerler. Arayüzler interface anahtar sözcüğü kullanılarak bildirilir

@interface , kendi (özel) Java ek açıklamalarınızı oluşturmak için kullanılır. Ek açıklamalar, tıpkı bir Java sınıfı veya arayüzü gibi kendi dosyalarında tanımlanır. Özel Java ek açıklama örneği:

@interface MyAnnotation {

    String   value();

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

}

Bu örnek, dört öğeye sahip MyAnnotation adlı bir açıklama tanımlar. @İnterface anahtar sözcüğüne dikkat edin. Bu Java derleyicisine bunun bir Java açıklama tanımı olduğunu gösterir.

Her öğenin, arabirimdeki bir yöntem tanımına benzer şekilde tanımlandığına dikkat edin. Bir veri türü ve adı vardır. Tüm ilkel veri türlerini öğe veri türleri olarak kullanabilirsiniz. Dizileri veri türü olarak da kullanabilirsiniz. Veri türü olarak karmaşık nesneleri kullanamazsınız.

Yukarıdaki ek açıklamayı kullanmak için şöyle bir kod kullanabilirsiniz:

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


}

Referans - http://tutorials.jenkov.com/java/annotations.html

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.