【问题标题】:which annotation field call the method哪个注释字段调用该方法
【发布时间】:2014-11-23 13:06:14
【问题描述】:

我有自定义注释类

@Retention(RetentionPolicy.RUNTIME)

public @interface Range {

        int min();
        int max();
 }

我有另一个类有很多字段,我想使用注释来检查字段的值是否在范围内。

public class AsdFile {

@Range(min = 0, max = 59)
private int sec;
@Range(min = 0, max = 59)
private int minsec;
@Range(min = 0, max = 24)
private int hour;
@Range(min = 1, max = 31)
private int day;

我想在这个类中写一个方法来控制这样的范围

public void validateRange(int input) 
{
    Field[] fields = this.getClass().getDeclaredFields();

    for(Field field: fields)
    {

        if (field.isAnnotationPresent(Range.class))

        {

            Range range = field.getAnnotation(Range.class);
            int max = range.max();
            int min = range.min();
            if ( ( input <= max ) && (input >= min) )
            {
                System.out.println("Value in range");
            }
            else
            {
                System.out.println("Value is not in range");
            }

        }
    }
}

我想控制特定注释的值,但我不知道该怎么做

【问题讨论】:

  • 看来你的代码没问题。什么是错误?
  • 它检查所有带注释字段的范围
  • 秒:34 最大值:59 分钟:0 范围内的最大值:59 分钟:0 范围内的最大值:24 分钟:0 不在范围内,最大值:31 分钟:1 不在范围内,最大值:12 分钟:1 不在范围,但我只想控制一秒钟

标签: java annotations


【解决方案1】:

我猜您想在特定字段上进行验证。您的代码将对四个字段进行验证。

如果我正确理解您的问题,这可能会对您有所帮助。即

在方法中传递字段名参数:

asdFile.validateRange("sec",10);

检查字段名称后检查验证:

public void validateRange(String fieldname, int input) 
    {
        Field[] fields = this.getClass().getDeclaredFields();

        for(Field field: fields)
        {

            if(field.getName().equals(fieldname)){
            if (field.isAnnotationPresent(Range.class))

            {

                Range range = field.getAnnotation(Range.class);
                int max = range.max();
                int min = range.min();
                if ( ( input <= max ) && (input >= min) )
                {
                    System.out.println("Value in range");
                }
                else
                {
                    System.out.println("Value is not in range");
                }

            }
            }
        }
    }

这将仅对“sec”字段进行验证。

【讨论】:

  • 谢谢,这正是我想要的。但是这种情况违反了私有访问修饰符。我说得对吗
  • 是的,如果您尝试在其他课程中访问它。
猜你喜欢
  • 2016-11-11
  • 2018-02-23
  • 2023-03-16
  • 1970-01-01
  • 2021-04-25
  • 2011-06-25
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
相关资源
最近更新 更多