2014-11-23 68 views
0

我有自定义的注释类其注释字段调用方法

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

     } 
    } 
} 

我想控制的具体注释的价值,但我不知道该怎么做的范围是

+0

看来你的代码没问题。什么是错误? – NFE 2014-11-23 13:09:43

+0

它检查范围那样 – user2957741 2014-11-23 13:11:54

+0

秒所有注释的字段:34 最大:59分钟:0 价值范围 最大:59分钟:0 价值范围 最大:24分钟:0 不在范围 最大:31min: 1 不在范围内 max:12min:1 不在范围内,但我想控制只是第二个 – user2957741 2014-11-23 13:12:48

回答

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

      } 
      } 
     } 
    } 

这将做验证的“秒”只有场。

+0

谢谢你,这正是我想要的。但是这种情况违反了私人访问修饰符。我是对的 – user2957741 2014-11-23 14:05:12

+0

是的,如果你正试图在其他课上访问它。 – NFE 2014-11-23 14:07:38