私はJavaに新しいので、Java注釈に関する問題があります。 ショート:コードを正しく設定すると、@ターゲットから"TYPE"となり、アノテーションを "SynCheck"クラスの上に配置します。できるだけ早く私は@Target(ソースコードに見られるように)「METHOD」に変更し、「はisValid」-methodの上に注釈を置くように、NullPointerExceptionがを引き起こし、私は、なぜを把握することはできません。 コードをご覧ください。 (これは電子メール構文検証ツールの一種です)。Java注釈:@Target(ElementType = METHOD)を使用するとNPEが発生する
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 = "[email protected]")
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'でアノテーションを取得しようとしますか? – yegodm