2014-10-02 3 views
0

Есть ли способ получить аннотации параметров метода в дочернем классе? Я пробовал использовать getParameterAnnotations, но он не работает. Я написал тест-класс для демонстрации:Параметр метода Аннотации в переопределенных методах

public class ParameterAnnotationInheritanceTest { 

    @Retention(RetentionPolicy.RUNTIME) 
    @Target(ElementType.PARAMETER) 
    @Inherited 
    public @interface MockAnnotation { 

    } 

    public class A { 

     public void test(@MockAnnotation String value) { 

     } 
    } 

    public class B extends A { 

     @Override 
     public void test(String value) { 

     } 
    } 

    @Test 
    public void TestA() throws NoSuchMethodException, SecurityException { 
     Method AMethod = A.class.getMethod("test", String.class); 
     Annotation[][] AMethodParameterAnnotations = AMethod.getParameterAnnotations(); 
     assertTrue(Arrays.asList(AMethodParameterAnnotations[0]).size() > 0); 
    } 

    @Test 
    public void TestB() throws NoSuchMethodException, SecurityException { 
     Method BMethod = B.class.getMethod("test", String.class); 
     Annotation[][] BMethodParameterAnnotations = BMethod.getParameterAnnotations(); 
     assertTrue(Arrays.asList(BMethodParameterAnnotations[0]).size() > 0); 
    } 

} 

Заранее благодарен!

ответ

1

Это не работает, потому что метод тестирования в дочернем классе B не является тем же методом тестирования, что и в суперклассе. Отменяя это, вы практически определили новый метод тестирования, который вызывается вместо исходного. Если вы определяете класс ребенка как этот

public class B extends A { 

} 

и запустить свой код еще раз, он отлично работает, потому что это унаследованный метод тест, который вызывается, что то, что вы хотите, насколько я понимаю.

+0

Hi Kateriana. спасибо за Ваш ответ. Метод должен быть переопределен методом, потому что мне нужно добавить некоторые аннотации к самому методу в дочернем классе, я хочу, чтобы наследовать аннотации параметров. Но я понял, почему это невозможно. –

+0

Привет, Тьяго. Пожалуйста, отметьте это как правильный ответ на ваш вопрос, если это так ;-) –

Смежные вопросы