哪个注释字段调用该方法

时间:2014-11-23 13:06:15

标签: java annotations

我有自定义注释类

@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");
            }

        }
    }
}

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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");
                }

            }
            }
        }
    }

这将在&#34; sec&#34;只有字段。