【发布时间】:2017-10-26 14:30:10
【问题描述】:
我是 Java 新手,我有一个关于 Java 注释的问题。 简短:当我将 @Target 设置为 "TYPE" 并将注释放在“SynCheck”类上方时,代码工作得很好。一旦我将 @Target 更改为 "METHOD" (如源代码中所示)并将注释放在“isValid”方法上,它会导致 NullPointerException 我不知道为什么。 请看一下代码。 (它是一种电子邮件语法验证器)。
Main.java:
package emailvalid;
import java.lang.annotation.Annotation;
public class Main {
public static void main(String[] args) throws Exception {
SynCheck validate = new SynCheck();
Class<? extends SynCheck> c = validate.getClass();
Annotation an = c.getAnnotation(InputVal.class);
InputVal s = (InputVal)an;
System.out.println(s.input());
System.out.println("Syntax: " + SynCheck.isValid(s.input()));
}
}
SynCheck.java:
package emailvalid;
import java.util.regex.Pattern;
public class SynCheck {
@InputVal(input = "example@domain.org")
public static boolean isValid(String checkAddr)
{
final Pattern regexevalpat = Pattern.compile(
"^((?=.{1,63}$)[a-zA-Z0-9]+[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\’\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]{0,})@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9-]+$");
if (!regexevalpat.matcher(checkAddr).matches()) {
return false;
} else {
return true;
}
}
}
InputVal.java:
package emailvalid;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InputVal {
String input();
}
我做错了什么?
任何帮助表示赞赏。 谢谢。
【问题讨论】:
-
您是否发布了
c.getAnnotation()在您实际需要ElementType.METHOD时尝试使用ElementType.TYPE获取注释?
标签: java annotations target