有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

反射从Java中的注释获取默认元素值

我已经创建了自己的注释,我通过反射在代码中使用它来做出决定。注释为其唯一元素设置了默认值。有没有办法通过反射访问默认值

PageableRequestMapping。java(注释)

package org.tothought.controllers.annotations;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface PageableRequestMapping {
    String variablePath() default "/";
}

用于检索默认值的Psuedo代码

private int parsePageNumber(StringBuffer requestURL,
        PageableRequestMapping pageableRequestMapping) {

        String variablePath = pageableRequestMapping.variablePath();

    //Psuedo code doesn't work in Java, included to illustrate intentions   
        if(variablePath.equalsIgnoreCase(pageableRequestMapping.variablePath().default())){
           //handle default case    
        }else{
          //handle different case
        }
        return 0;
}

我对这个问题的研究没有发现任何例子。我理论上认为这个值可以通过类以静态方式访问,但它不能。所以我只剩下两个问题

  • 是否可以在注释中获取元素的默认值
  • 如果是,怎么做

另外,我知道我可以硬编码这个值,但是我想让程序稍微健壮一些


共 (2) 个答案

  1. # 1 楼答案

    通过在类上应用注释并通过反射从类中检索注释,您可以这样做:

    @PageableRequestMapping
    class MyUtilClass{
    }
    
    
    public String getDefaultValue(){
        PageableRequestMapping pageableRequestMapping = MyUtilClass.class.getAnnotation(PageableRequestMapping.class);
        return pageableRequestMapping.variablePath();
    }
    
  2. # 2 楼答案

    您可以使用反射来获取方法对象,然后利用^{}

    Method method = pageableReqMapping.annotationType().getMethod("variablePath");
    String variablePath = (String) method.getDefaultValue();
    

    下面是一个具体的例子:

    public class AnnotationTest {
    
      public static void main(String[] args) throws Exception {
        Class<?> clazz = Annotation.class;
        Method method = clazz.getDeclaredMethod("value");
        String value = (String) method.getDefaultValue();
        System.out.println(value);
      }
    
      public @interface Annotation {
        String value() default "default value";
      }
    }