Java neden değiştirici yerine @Override ek açıklaması kullanıyor?


19

Java'nın @Overrideek açıklamayı yeni bir overridedeğiştirici oluşturmak yerine kullanma motivasyonları nelerdi ?

@Override
public String toString() {
   return "";
}

vs.

public override String toString() {
   return "";
}

2
Bu bir sonradan düşünülmüştü.
Tulains Córdova

Yanıtlar:


21

@Override başlangıçta dilde değildi. Ekleme ihtiyacı duyulduğunda, genel bir mekanizma (ek açıklamalar) kullanmak, dile yeni bir anahtar kelime eklemekten daha kolaydı. Yeni bir anahtar kelime eklemek her zaman uyumsuz bir değişikliktir, çünkü bu kelimeleri tanımlayıcı olarak kullanan programları kırabilir.

İlk günden itibaren bir geçersiz kılma işareti ekleyen dillerde, genellikle bir anahtar kelimedir (örnekler Kotlin ve Scala'dır), Java'da, geçersiz kılma işareti olmayan eski Java sürümüyle geriye dönük olarak uyumlu kalma meselesiydi.


Yeni anahtar kelimeler getiren değişiklikler olduğunda, geçersiz kılmanın bir ek açıklama olduğu tutarsız görünüyor. Örneğin, arayüz yöntemleri için "varsayılan" değiştirici.
jwa

6
@jwa Gerçekten değil: defaultzaten ayrılmış bir anahtar kelimeydi (anahtar ifadelerinde kullanılır) - bunun için yeni bir kullanım eklediler. Ayrıca, şu anda hiçbir şey yapmayan ancak ileride kullanılmak üzere ayrılmış birkaç anahtar kelime vardır (const, goto) - bkz. JLS §3.9
Michał Kosmulski

3
"örnekler Kotlin ve Java" burada bir yazım hatası gibi görünüyor, Java yerine örneğin Scala mı yazmak istediniz?
gnat

6
global anahtar kelimeler eklemenin bir şeyleri bozduğu doğru olsa da, kod kırılmadan bağlamsal bir anahtar kelime olarak eklenmiş olabilir. biri bunun ayrıştırmayı zorlaştırmayacağı ve açıklama mekanizmasının yeterince iyi olduğu için yapılmadığını varsayar
jk.

1
@ MichałKosmulski: enumEklenen anahtar kelimenin eski kodu kıracağını hatırlıyorum . Burada daha fazla anahtar kelime: stackoverflow.com/questions/16506411
Allon Güralnek

13

Davranışı geçersiz kılmak için @Override ek açıklamasına gerek yoktur ; Bu bir açıklamadır, çünkü sadece yöntemin derleyiciye yönelik amacının bir bağlamını ekler, yöntemin kendisini değiştirmez.

Ek açıklama olmadan, işlevselliği geçersiz kılmayı düşünebilirsiniz , ancak yanlışlıkla yapamazsınız (biraz farklı bir imza kullanarak). Ek açıklama eklemek, derleyiciye bu yöntem aslında davranışı geçersiz kılmadığında bir hata oluşturmasını söyler.

Bu nedenle, bir ek açıklama olarak mükemmel bir anlam ifade eder.


+1 Ek açıklamalarla uyarıları devre dışı bırakmaya benzer şekilde, ek açıklamalarla isteğe bağlı uyarıları / hataları etkinleştirmenin de mümkün olacağı mantıklıdır.
Hulk
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.