it-swarm.dev

Java ile arabirim ve @interface arasındaki fark nedir?

90'lı yılların sonlarında JBuilder'ı University'de kullanırken Java'ya dokunmadım, bu yüzden biraz temassızım - bu haftaki küçük bir Java projesi üzerinde çalışıyorum ve Intellij IDEA IDE'm olarak, düzenli. Net gelişimimdeki hız değişikliği için.

Arabirimler ve @ arabirimler ekleme desteği olduğunu, @ arabirim nedir ve normal arabirimden ne kadar farklı olduğunu fark ettim.

public interface Test {
}

vs.

public @interface Test {
}

Biraz arama yaptım ancak @ interface ile ilgili pek çok yararlı bilgi bulamadım.

242
Bittercoder

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

Bunun anlamı değil gerçekten bir arayüzdür, fakat bunun yerine yeni bir açıklama türü - @override gibi bir fonksiyon değiştirici olarak kullanılacaktır.

Konuyla ilgili bu javadocs girdisine bakın.

262
mrkishi

arayüz:

Genel olarak, bir arayüz, temel uygulama detaylarını ifşa etmeden bir sözleşmeyi ortaya koymaktadır. Nesneye Yönelik Programlama'da, arayüzler davranışı ortaya çıkaran ancak mantık içermeyen soyut tipleri tanımlar. Uygulama, arayüzü uygulayan sınıf veya tür tarafından tanımlanır.

@ interface: (Açıklama türü)

Çok fazla yorum içeren aşağıdaki örneği kullanı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ünü 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();
}

hangi bir sınıfı aşağıdaki gibi ekler: 

@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

}

PS: Birçok açıklama koddaki açıklamaların yerine geçiyor.

Referans: http://docs.Oracle.com/javase/tutorial/Java/annotations/declaring.html

89
mavis

interface anahtar sözcüğü, Java'da geleneksel bir arabirim sınıfı bildirdiğinizi gösterir.
@interface anahtar sözcüğü, yeni bir açıklama türünü bildirmek için kullanılır. 

Sözdiziminin açıklaması için docs.Oracle tutorial ek açıklamalarına bakın.
__. Bkz. JLS eğer @interface'nin ne anlama geldiğinin ayrıntılarına gerçekten girmek istiyorsanız.

31
DavidValeri

interface:, uygulayan bir sınıfın sözleşmesini tanımlar.

@interface: ek açıklama sözleşmesini tanımlar 

13
eosimosu

Java programlama dilinde interface , sınıfların uygulaması gereken bir davranışı belirtmek için kullanılan soyut bir türdür. Protokollere benzerler. İnterface anahtar kelimesi kullanılarak arayüzler ilan edilir

@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. İşte özel Java ek açıklama örneği:

@interface MyAnnotation {

    String   value();

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

}

Bu örnek, dört öğeli MyAnnotation adındaki bir notu tanımlar. @ İnterface anahtar kelimesine dikkat edin. Bu, Java derleyicisine bunun bir Java ek açıklama tanımı olduğunu gösterir.

Her elemanın bir arayüzdeki yöntem tanımına benzer şekilde tanımlandığına dikkat edin. Bir veri tipi ve bir ismi var. Tüm ilkel veri tiplerini element veri tipleri olarak kullanabilirsiniz. Dizileri veri türü olarak da kullanabilirsiniz. Karmaşık nesneleri veri türü olarak kullanamazsınız.

Yukarıdaki notu kullanmak için, aşağıdaki gibi bir kod kullanabilirsiniz:

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


}

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

0
Piyush Singh