java - 重写方法中的方法参数注释

标签 java reflection annotations

有没有办法获取子类方法的参数注解?我尝试使用 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);
    }

}

提前致谢!

最佳答案

它不起作用,因为子类 B 中的测试方法与父类(super class)中的测试方法不同。通过重写它,您实际上定义了一种新的测试方法,该方法将代替原始测试方法被调用。如果你像这样定义你的子类

public class B extends A {

}

并再次运行您的代码,它工作正常,因为它是被调用的继承测试方法,据我所知,这就是您想要的。

关于java - 重写方法中的方法参数注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26160297/

相关文章:

java - 使用 java mail api 在邮件服务器上更快地搜索特定邮件

java - 使用身份验证 cookie 打开 WebSocket 连接

java - 文件过早结束 - XWPFDocument to PDFConverter

c# - 在运行时获取继承的对象类型

python - 在 Prodigy 中对 csv 文件运行 ner.manual

java - 字符串分割及数据返回问题

Java 创建具有泛型类型的泛型类

c# - 如何通过来自多个程序集的接口(interface)有效地对所有实现进行分组?

json - 如何在 JSON 对象 Spring Boot 中使用 @produces

java - 如何使用 jaxb 获取 XML 格式的标签之间的值