سؤال

انتقلت إلى جهاز جديد يحتوي على أحدث برنامج التحويل البرمجي لـ Sun's Java ولاحظت بعض التحذيرات في كود Java 6 الحالي. اقترح IDE Eclipse أن أقوم بتعليق المهمة مع:

@SuppressWarnings("rawtypes")

فمثلا:

class Foo<T> {
...
}
...
@SuppressWarnings("rawtypes")
Foo foo = new Foo();

عندما عدت إلى الجهاز مع المترجم الأقدم (JDK 1.6.0_20) ، لاحظت أن هذا المترجم الأقدم يحذر الآن من قمع تحذيرات "الأنواع الخام" ، مدعيا أن هذا القمع غير مدعوم ويقترح استبداله بـ suppresswarnings ("لم يتم التحقق منه"). أيضًا ، كانت هناك بعض الأماكن التي جعلني أحدث التحويل البرمجي ، افتراضيًا ، أضع كلاً من "الأنماط غير المحددة" و "الأنواع الخام" - تجميع هذا الرمز مع المترجم الأقدم يعيد إنتاج نفس التحذير.

كيف يمكنني فرض التوافق للخلف/إلى الأمام بين الاثنين ، بحيث لا ينتج أي من المترجمين تحذيرات؟

هل كانت مفيدة؟

المحلول

يمكنك استخدام ال @SuppressWarnings("unchecked") الذي يدعمه كل من برنامج التحويل البرمجي Eclipse و Javac.

لكن تذكر @SuppressWarnings يتم استخدام التعليقات التوضيحية من قبل المترجم الخاص بك والذي يمكن أن يكون له قيمه الخاصة. يفرض JLS فقط المترجم على فهم القيم "غير المخصصة" و "DEPRECATED" (في الوقت الحالي).

يجب على بائعي المترجمين توثيق أسماء التحذير التي يدعمونها بالتزامن مع نوع التعليقات التوضيحية هذا. يتم تشجيعهم على التعاون لضمان عمل نفس الأسماء عبر مجموعات متعددة.

إذا كنت تستخدم Helios ، فستحتاج إلى تعيين خيار محدد للسماح @SuppressWarnings("unchecked") بدلاً من @SuppressWarnings("rawtypes"),

في حال لم يكن من الممكن تحديث الرمز بالرمز الجديد ، suppressRawWhenUnchecked=true يمكن تعيين خاصية النظام عند بدء Eclipse.


موارد :


تحرير: إليك مقالة Knol غير متوفرة الآن والتي تم استخدامها كمرجع ، كتبها في الأصل بواسطة أليكس ميلر.

@suppresswarnings التعليق التوضيحي في جافا

التعليق التوضيحي القياسي لقمع التحذيرات المختلفة

تمت إضافة تعليق توضيحي Countwarnings كشرح قياسي في Java SE 5.

تعريف

ال @قمع تحذيرات يتم تعريف التعليق التوضيحي في مواصفات لغة Java القسم 9.6.1.5. ينص هذا القسم على:

نوع التعليقات التوضيحية SuppressWarnings يدعم السيطرة على المبرمج على التحذيرات التي صدرت عن برنامج التحويل البرمجي Java. أنه يحتوي على عنصر واحد هو مجموعة من String. إذا تم تعليق إعلان البرنامج مع التعليق التوضيحي @SuppressWarnings(value = {S1, ... , Sk}), ، ثم يجب على مترجم Java عدم الإبلاغ عن أي تحذير حدده أحد S1 أو ... ، SK إذا كان هذا التحذير قد تم إنشاؤه نتيجة للإعلان المشروح أو أي من أجزائه.

يتم تحديد التحذيرات غير المحددة بواسطة السلسلة "unchecked".

اللاحقة الجزء على @Deprecation يذكر أيضًا أنه يمكن قمع هذه التحذيرات @SuppressWarnings("deprecation").

أنواع تحذير صالحة

سلاسل التحذيران الوحيدة اللذين تم ذكرهما في المواصفات نفسها "لم يتم التحقق منه" و "إهمال". ومع ذلك ، يستخدم Sun JDK مجموعة أكبر من الأوتار في المترجم. يمكنك تحديد المجموعة الحالية من خلال التنفيذ:

javac -X

والتي ستظهر لك (من بين أشياء أخرى) الإعدادات الصالحة لـ -xlint.

على سبيل المثال ، يظهر Sun JDK 1.5:

  • الكل - قم بقمع جميع التحذيرات من هذا الرمز
  • الإهمال - قمع التحذيرات من استخدام الرمز المهمل
  • لم يتم التحقق منه - قمع التحذيرات من مكالمة لم يتم التحقق منها أو ممثلين لم يتم التحقق منه
  • Fallthrough - قمع التحذيرات إذا كان المفتاح قد مر دون العثور على حالة صالحة (وليس الافتراضي)
  • طريق -
  • التسلسل - قمع التحذيرات إذا كانت الطبقة القابلة للتسلسل لا تحدد serialversionuid
  • أخيرًا - قم بقمع التحذيرات من العودة في النهاية (والتي ستتجاهل العودة مع المحاولة)

ويضيف Sun JDK 1.6:

  • يقذف
  • Divzero - قمع التحذيرات إذا تم اكتشاف عدد صحيح على الصفر
  • فارغة
  • تجاوزات
  • لا أحد

تدعم IDES وأدوات التحليل الثابت عادةً عددًا كبيرًا من القيم الأخرى الممكنة لـ suppressWarnings. تتوافق هذه القيم مع عمليات التحقق من التحليل الثابت المحددة التي تقوم بها IDE.

كسوف

قيم تحذير Eclipse لـ Eclipse 3.3 موثق في مستندات JDT.

  • الكل - قمع كل التحذيرات
  • الملاكمة - قمع التحذيرات بالنسبة لعمليات الملاكمة/إلغاء التفسير
  • الممثل - قمع التحذيرات بالنسبة إلى العمليات المصبوبة
  • Dep -Ann - قمع التحذيرات بالنسبة إلى التعليق التوضيحي المنخفض
  • إهمال - قمع التحذيرات بالنسبة إلى الإهمال
  • السقوط - قمع التحذيرات بالنسبة إلى الفواصل المفقودة في عبارات التبديل
  • أخيرًا - قم بقمع التحذيرات نسبة إلى الحظر الذي لا يعود أخيرًا
  • الاختباء - قمع التحذيرات بالنسبة للسكان المحليين الذين يخفيون المتغير
  • التبديل غير المكتمل - قمع التحذيرات بالنسبة للإدخالات المفقودة في بيان التبديل (حالة التعداد)
  • NLS - قمع التحذيرات نسبة إلى حرفية سلسلة غير NLS
  • NULL - قمع التحذيرات بالنسبة للتحليل الفارغ
  • تقييد - قمع التحذيرات بالنسبة إلى استخدام المراجع المحظورة أو المحظورة
  • التسلسلية - قمع التحذيرات بالنسبة إلى الحقل المسلسل المسلسل لطبقة قابلة للتسلسل
  • الوصول الثابت - قمع التحذيرات بالنسبة للوصول الثابت غير الصحيح
  • الوصول الاصطناعي - قمع التحذيرات بالنسبة للوصول غير المنقذ من الطبقات الداخلية
  • غير محدد - قمع التحذيرات بالنسبة إلى العمليات غير المقيدة
  • الوصول غير المؤهلة-الوصول-قمع التحذيرات بالنسبة للوصول الميداني غير مؤهل
  • غير مستخدم - قمع التحذيرات بالنسبة للرمز غير المستخدم

intellij

Netbeans

أمثلة

مثال على تحديد تحذير واحد:

@SuppressWarnings("unchecked")
public void methodWithScaryWarnings() {
    List rawList = new ArrayList();
    List<String> stringList = (List<String>)rawList;
}

مثال على استخدام تحذيرين:

@SuppressWarnings({"unchecked","deprecation"})
public void methodWithScaryWarnings() {
    callDeprecatedMethod();
}

نصائح أخرى

لاحظ أن Eclipse 3.5 لا يفهم الأنواع الأولية والأعلام تحذير للتبديل إلى دون رادع. إنه لأمر محبط أن توصل Eclipse إلى شرح توضيحي للأشخاص الخام الذي يسبب مشاكل أكثر من حلها. يجب أن يكونوا عالقين مع المعيار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top