gpt4 book ai didi

Java注释: Using @Target(ElementType=METHOD) causes NPE

转载 作者:行者123 更新时间:2023-12-02 12:05:00 26 4
gpt4 key购买 nike

我是 Java 新手,有一个关于 Java 注释的问题。简而言之:当我将 @Target 设置为 "TYPE" 并将注释放置在“SynCheck”类上方时,代码工作得很好。一旦我将@Target更改为“METHOD”(如源代码中所示)并将注释放在“isValid”方法上,它就会导致>NullPointerException,我不明白为什么。请看一下代码。 (它是一种电子邮件语法 validator )。

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

我做错了什么?

任何帮助表示赞赏。谢谢。

最佳答案

您的代码不会查找方法上的注释。仅在类里面。

 SynCheck validate = new SynCheck();
Class<? extends SynCheck> c = validate.getClass();
Annotation an = c.getAnnotation(InputVal.class);
InputVal s = (InputVal)an;

只有当 InputVal 注释位于 SyncCheck 类上(作为类型注释)时,这才有效。

当您将注释移至方法时,注释将为 null,因为它不再位于类中...

如果您想将其放在需要将代码更改为的方法上:

 Class<? extends SynCheck> c = validate.getClass();
Method m = c.getMethod("isValid");
InputVal s = m.getAnnotation(InputVal.class);

附带的注释是,您不必强制转换注释,您可以直接将其检索到其本身的类型。

关于Java注释: Using @Target(ElementType=METHOD) causes NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46957047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com