ال Annotation، أو (حسب معجم ArabEyes) التعليق/الحاشية، هو إضافة معلومات إلى الشيفرة. لكن الفرق بينها وبين ال comments أو ال Javadoc، هو أن ال annotations يمكن استعمالها من طرف annotation processor للقيام بعمليات مختلفة: إنشاء ملفات، إنشاء جداول في قاعدة البيانات، التحقق من احترام الشيفرة للمعايير المحددة، أو حتى إضافة أسطر جديدة من الكود.. وقد تمت إضافة ال annotations إلى الجافا في النسخة الخامسة JavaSE5.
هناك نوعين من ال annotations، الحواشي الموجودة في الجافا، وهي ثلاثة فقط، والحواشي التي يكتبها المبرمج.
الحواشي (Annotation) الموجودة في الجافا:
- Override@: تقوم هذه الحاشية بالإشارة إلى أن الطريقة التي تأتي بعدها تقوم ب override لطريقة في الفئة الأم. إذا لم يجد ال compiler أي طريقة بنفس التوقيع (method signature) في الفئة لأم فسيرسل رسالة خطأ.
مثال: لنفترض الفئة التالية، والتي تعمل override للطريقة toString الموجودة في الفئة Object. سنقوم عمدا بكتابة ال "S" الموجودة في toString ب lower case بدل upper case، ونرى ما النتيجة.public class TestOverride { @Override public String tostring() { return "Nothing special"; } }
عند عمل ال compilation، فإن ال compiler يطبع رسالة الخطأ التالية:TestOverride.java:2: method does not override or implement a method from a supertype @Override ^ 1 error
مع أن استعمال الحاشية @Override اختياري، إلا أنه ينصح باستعمالها دائما، حتى لا نقوم سهوا بإنشاء طريقة جديدة ومستقلة، في الوقت الذي نظن أننا قمنا ب override لطريقة موجودة في الفئة الأم.
.
. - Deprecated@: هذه الحاشية تشير إلى أن الطريقة أصبحت deprecated، وهذا لا ينتج عنه خطأ في ال compilation مثل @Override، لكن فقط إنذار (compiler warning).
مثلا، عندما نقوم بال compilation للكود التاليpublic class TestDeprecated { public TestDeprecated() { DeprecatedCode d = new DeprecatedCode(); d.someMethod(); } } class DeprecatedCode { @Deprecated public void someMethod() { System.out.println("I am so deprecated!!"); } }
فسنحصل على الرسالة التالية من ال compiler:.Note: TestDeprecated.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details
وعند إضافة الخيار -Xlint$ javac -Xlint TestDeprecated.java TestDeprecated.java:4: warning: [deprecation] someMethod() in DeprecatedCode has been deprecated d.someMethod(); ^ 1 warning
.
. - SuppressWarnings@: تقوم هذه الحاشية بإلغاء كل الإنذارات الخاصة بالcompiler. مثلا
public class TestSupressWarnings { public TestSupressWarnings() { java.util.List<String> list = new java.util.ArrayList(); } }
هذا الكود يعطينا إنذارا من نوع unchecked نتيجة هذا السطرjava.util.List<String> list = new java.util.ArrayList();
إذا كنا متأكدين مما نعمل وأردنا إزالة الإنذار، يكفي إضافة @SuppressWarnings، وتحديد نوع الإنذار الذي نريد إزالته، وستتم ال compilation بدون أي إنذار:public class TestSupressWarnings { @SuppressWarnings("unchecked") public TestSupressWarnings() { java.util.List<String> list = new java.util.ArrayList(); } }
القوة الحقيقة لل Annotations ليست في تلك المتاحة من طرف الجافا، لكن في تلك التي يمكن للمبرمج كتابتها. لكن ذلك موضوع آخر...





