@Override annotation ve Java5 ile Java6 arasındaki farkı
Yazan: Serkan Kaba 7 Mayıs 2009
Java5 ile gelen annatationlardan biri olan @Override bir metodun eskisini geçersiz kıldığını (override) ifade eder. Ancak Gentoo’da bir hata nedeniyle farkettiğim üzereanlamı Java5 ile Java6 arasında farklılık göstermektedir. Java6′dageçersiz kılınan ve gerçekleştirilen metodlar için @Override kullanılabilirken Java5′te sadece ilk kullanımı geçerlidir. Bu bir hata olarak Sun hata kayıt sistemine defalarca raporlanmıştır. (Benzer ve çift hata kayıtlarından anlaşıldığı üzere) Benim hataların yorumlarından anladığım amacın Java5 için de her iki durumu desteklemek olduğu ancak derleyicideki hata sebebiyle Java5 spesifikasyonunun revize edilerek sadece ilk kullanımın desteklendiği ve Java6′da her iki kullanımım geçerli sayıldığı yönünde. Bunun sebebi ise hatalı da olsa Java5 için uyumluluğu korumak.
Şimdi bu durumu bir örnek üzerinden inceleyelim.
interface Interface { public abstract void b(); } abstract class Base { public abstract void a(); } public class Sub extends Base implements Interface { @Override public void a() { } @Override public void b() { } }
Bu kod Java6 ile gelen derleyici ile derlenmekte ancak Java5′teikinci @Override için şu hatayı vermektedir.
Sub.java:15: method does not override a method from its superclass @Override
İşin ilginç yanı Java6 derleyicisi ile -source 1.5 -target 1.5 parametreleri verildiğinde de hata vermemekte 1.5 ile olan uyumsuzluğu ancak ecj (Eclipse Java derleyicisi) yakalayabilmektedir. Bu sebepten ötürü arayüz metodları gerçekleştirilirken @Override kullanılmaması başka amaçla illa Java6 gerekmiyorsa kodun uyumluluğunu arttıracaktır.







