سؤال

إذا فئة محددة من الشرح ، هي بطريقة أو بأخرى من الممكن أن فرقة فرعية لتحديد نفس الشرح?

فعلى سبيل المثال لدينا بسيطة فئة/فئة فرعية الزوج أن حصة هذه @Author @interface. ما أود القيام به هو قوة لكل أخرى فرعية لتحديد نفس @Author الشرح منع RuntimeException في مكان ما على الطريق.

TestClass.java:

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@interface Author { String name(); }

@Author( name = "foo" )
public abstract class TestClass
{
    public static String getInfo( Class<? extends TestClass> c )
    {
        return c.getAnnotation( Author.class ).name();
    }

    public static void main( String[] args )
    {
        System.out.println( "The test class was written by "
                        + getInfo( TestClass.class ) );
        System.out.println( "The test subclass was written by " 
                        + getInfo( TestSubClass.class ) );
    }
}

TestSubClass.java:

@Author( name = "bar" )
public abstract class TestSubClass extends TestClass {}

أعرف أنني أستطيع أن أعدد كل الشروح في وقت التشغيل والتحقق من المفقودين @Author, ولكن أود حقا أن تفعل هذا في وقت الترجمة ، إذا كان ذلك ممكنا.

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

المحلول

نصائح أخرى

أنا متأكد تماما أن هذا من المستحيل أن تفعل ذلك في وقت الترجمة.

ولكن هذا هو واضح المهمة من أجل "الوحدة"-اختبار.إذا كان لديك الاتفاقيات مثل هذا الذي كنت أود القسري ، ولكن الذي يمكن أن يكون من الصعب أو من المستحيل أن تحقق مع المترجم ، "وحدة"-الاختبارات هي وسيلة بسيطة للتحقق منها.

احتمال آخر هو تنفيذ قاعدة مخصصة في ثابت محلل.هناك العديد من الخيارات هنا أيضا.

(أنا وضعت وحدة في ذعر يقتبس, لأن هذا هو حقا اختبار الاتفاقيات بدلا من وحدة معينة.ولكن يجب أن تعمل جنبا إلى جنب مع وحدة-الاختبارات).

هل يمكن أن تجعل الشرح (مثلا ، @EnforceAuthor) مع @الموروثة عن الفائقة و استخدام مترجم الشروح (منذ جافا 1.6) إلى اللحاق في وقت الترجمة.ثم لديك إشارة إلى فرعية و يمكن أن تحقق إذا كان آخر الشرح (مثلا ، @المؤلف)) مفقود.هذا من شأنه أن يسمح إلغاء تجميع مع رسالة خطأ.

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