Java Açıklamaları


114

Java'da ek açıklamaların amacı nedir? Bir yorum ile gerçek kod arasında bir yerde oldukları konusunda bu bulanık fikrim var. Programı çalışma zamanında etkiliyorlar mı?

Tipik kullanımları nelerdir?

Java'ya özgü mü? C ++ eşdeğeri var mı?


9
Ek açıklamalarla gerçekten kötü şeyler yapabilirsiniz. Örneğin, Spring Framework'ü ve yöntem çağrılmasından önce bir işlemi başlatan ve istisna / hata durumunda geri dönüş yapan ve başarılı işlemi gerçekleştiren @Transactional ek açıklamasını biliyorsanız. SOC ilkesini tamamen destekler (endişenin ayrılması). Çok temiz ! Java kuralları! :-)

1
Bu bana 3 soru gibi görünüyor. İkincisi kendi içinde çok geniştir.
Raedwald

Sözdizimine göre tüm açıklamalar arayüzler gibi görünür. Peki, derleyici veya JVM amacını nasıl biliyor? @ Override -> alırsak, yöntemin düzgün şekilde geçersiz kılınıp kılınmadığını kontrol eder @ Transactional, yukarıda açıklandığı gibi, işlemle ilgili şeyler yapar. Tüm bu ek açıklamalar için tanımı / mantığı nerede bulabiliriz?
Paramesh Korrakuti

Yanıtlar:


80

Ek açıklamalar esas olarak diğer kodları inceleyen kod tarafından kullanılır. Genellikle, davranışlarını değiştirmek için çalışma zamanında mevcut sınıfları değiştirmek (yani dekore etmek veya sarmak) için kullanılırlar. JUnit ve Hibernate gibi çerçeveler, çerçeveleri kullanmak için kendiniz yazmanız gereken kod miktarını en aza indirmek için ek açıklamaları kullanır.

Oracle, kendi sitesinde kavram ve bunun Java'daki anlamı hakkında iyi bir açıklamaya sahiptir .


17

Ayrıca, Java'ya özgü mü, C ++ eşdeğeri var mı?

Hayır, ancak VB ve C # aynı şey olan niteliklere sahiptir.

Kullanımları oldukça çeşitlidir. Tipik bir Java örneğinin @Overridekod üzerinde etkisi yoktur, ancak dekore edilmiş yöntem aslında başka bir yöntemi geçersiz kılmıyorsa, derleyici tarafından bir uyarı (veya hata) oluşturmak için kullanılabilir. Benzer şekilde, yöntemler eski olarak işaretlenebilir.

Sonra bir yansıma var. Kodunuza bir sınıf türünü yansıttığınızda, özniteliklere erişebilir ve orada bulunan bilgilere göre hareket edebilirsiniz. Ben Java herhangi örneklerini bilmiyorum ama NET'te bunun yaratmak için derleyici tarafından kullanılır (de) serileştirme , sınıflar için bilgilerini belirlemek bellek düzeni yapıları ve beyan fonksiyonu ithalatı (diğerlerinin yanı sıra) eski kütüphanelerinden. Ayrıca IDE form tasarımcısının nasıl çalıştığını da denetlerler.

/ EDIT: Sınıflardaki öznitelikler, etiket arabirimleriyle karşılaştırılabilir ( Java'da Serileştirilebilir gibi ). Bununla birlikte, .NET kodlama yönergeleri etiket arabirimlerini kullanmamayı söyler. Ayrıca, yöntem düzeyinde değil, yalnızca sınıf düzeyinde çalışırlar.


13

Anıl iyi bir özet veriyor ve işte bir JUnit ek açıklaması örneği

@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
    readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}

Burada @Testek açıklama JUnit'e flatfileMissingyöntemin yürütülmesi gereken bir test olduğunu ve beklenen sonucun fırlatıldığını söylüyor IOException. Böylece, testlerinizi çalıştırdığınızda, bu yöntem çağrılacak ve bir IOExceptionatılıp atılmadığına bağlı olarak test başarılı veya başarısız olacaktır .


7

Java ayrıca, yalnızca açıklamalar oluşturmakla kalmayıp aynı zamanda bu açıklamaların kaynak kod üzerinde nasıl çalışacağına da karar verdiğiniz Ek Açıklama İşleme Aracına (apt) sahiptir.

İşte bir giriş.


4

Ek Açıklamalar ile yapabileceğiniz bazı harika şeyler görmek için JavaBean notlarıma ve açıklama işlemcime bakın .

Kod oluşturmak, derlemeniz sırasında fazladan doğrulamalar eklemek için harikalar ve ben de bunları bir hata mesajı çerçevesi için kullanıyorum (henüz yayınlanmadı - patronlarla görüşmemiz gerekiyor ...).


1

Birebir tanıma göre bir açıklama, bir öğeye notlar ekler. Aynı şekilde, Java ek açıklamaları, kod hakkında daha fazla bilgi sağlamak için kaynak koduna eklediğimiz etiketlerdir. Java açıklamaları, açıklamalı program öğesi ile bilgileri ilişkilendirir. Java açıklamalarının yanı sıra Java programları, genellikle kaynak kod dosyasındaki yorumlarda bulunan çok sayıda resmi olmayan belgelere sahiptir. Ancak Java ek açıklamaları, açıklamaların biçimini açıklamak için doğrudan açıklama türlerini kullanarak program öğelerine açıklama ekledikleri yorumlardan farklıdır. Java Açıklamaları, bilgileri standart ve yapılandırılmış bir şekilde sunar, böylece işleme araçları tarafından uygun bir şekilde kullanılabilir.

Ayrıntılı olarak okumak için, Java Ek Açıklamaları hakkında güzel bir eğitim var



0

EJB söz konusu olduğunda ek açıklamalar, açık bir orta düzey yazılım yaklaşımı yerine örtük orta düzey yazılım yaklaşımını seçmek olarak bilinir; ek açıklama kullandığınızda, API'den tam olarak ihtiyacınız olan şeyi özelleştirirsiniz, örneğin bir banka havalesi için işlem yöntemini çağırmanız gerekir : ek açıklama kullanmadan: kod olacaktır

transfer(Account account1, Account account2, long amount)    
{
   // 1: Call middleware API to perform a security check
   // 2: Call middleware API to start a transaction
   // 3: Call middleware API to load rows from the database
   // 4: Subtract the balance from one account, add to the other
   // 5: Call middleware API to store rows in the database
   // 6: Call middleware API to end the transaction
}

Ek Açıklama kullanırken kodunuz, ara yazılım hizmetlerini kullanmak için hantal API çağrıları içermez. Kod temizdir ve iş mantığına odaklanmıştır

transfer(Account account1, Account account2, long amount) 
{
   // 1: Subtract the balance from one account, add to the other
}
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.