سؤال

أتحقق دائمًا من حجج الوظائف العامة وأطرح الاستثناءات عندما يكون هناك خطأ ما.(بالنسبة للمساعدين الخاصين أستخدم التأكيدات).

مثله:

if( a < 0 || a >= b )
    throw new IllegalArgumentException("'a' must be greater or equal to 0 and 
        smaller than b ");

ولكن يزعجني دائمًا كتابة رسائل الخطأ هذه.تبدو الرسالة زائدة عن الحاجة بالنسبة لي، لأن الرسالة هي مجرد نفي للبيان

a < 0 || a >= b

.

غالبًا ما يحدث أيضًا أنني أعيد تسمية المتغير بإعادة البناء (في الكسوف) ومن ثم لا تعكس الرسالة التغييرات.أو أغير الشروط وأنسى تغيير الرسائل.

سيكون أمراً رائعاً لو أستطيع أن أكتب شيئاً مثل:

assertArgument(a >= 0 && a < b);

يجب أن يؤدي هذا إلى ظهور IllegalArgumentException برسالة مثل

"violated argument assertion: a >= 0 && a < b."

في لغة C يمكنك كتابة ماكرو (في الواقع في لغة C التأكيد هو مجرد ماكرو).هل هناك طريقة بسيطة للقيام بشيء مثل هذا في جافا؟

شكرًا لك!

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

المحلول

في لغة C، لا يمكنك استخدام وحدات الماكرو للقيام بذلك، ولكن في cpp (المعالج المسبق لـ C) يمكنك :-) إذا كنت تريد حقًا القيام بذلك، فلا يوجد شيء يمنعك من تشغيل cpp على مصدر Java الخاص بك قبل أن يتم تجميعه.سيتيح لك ذلك استخدام وحدات ماكرو نمط cpp (قد تحتاج إلى تجريد الأسطر التي تبدأ بـ #line من إخراج cp.)

إعادة إنتاج الشرط في الاستثناء هو IMHO بما في ذلك الكثير من تفاصيل التنفيذ.إذا كانت رسالة الاستثناء الخاصة بك تصف الانتهاك في العقد من حيث العقد (على سبيل المثال، "لم يتم تقديم كائن أصلي"، "لا يمكن أن يكون المبلغ سالبًا") فلن تحتاج إلى تغييرها في كل مرة يتغير فيها الشرط.

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