java Annotation Demo

6350 ワード

Java 1.5はannotationを導入し、この機能は非常に使いやすく、c#などの言語で参考にした特性です.
まず、コンパイラ自体はoverrides、supresswarningなどの注釈をサポートします.
Spring,junitなどのフレームワークも自分で書いて自分で定義した注釈を処理し,javaにいくつかの宣言式プログラミングのいくつかの特徴を持たせ,コード量を減らした.
次の例は、カスタムコメントの処理を自分で維持する必要がある簡単なカスタムコメントです.
次のアプリケーションはよく書けません.例えば、webプログラミングではjava beanのfieldsの注釈に基づいて、対応するStructs検証ラベルなどを自動的に生成することができます.
jspページの開発をより迅速に完了できます.
import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.util.regex.Pattern;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface EmailAddress {

}

class student {
    String sname;
    int sid;
    @EmailAddress
    String email;

    public student(int _sid, String _sname, String _email) {
        sid = _sid;
        sname = _sname;
        email = _email;
    }

    public String toString() {
        return "id:" + sid + "sname:" + sname + " email:" + email;
    }
}

class emailValidator {
    static boolean isvalidemail(String email) {
        Pattern ptn = Pattern
                .compile("^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$");
        return ptn.matcher(email).matches();
    }

    public static void checkEmailType(Object obj,
            Class<? extends Annotation> antcls)
            throws IllegalArgumentException, IllegalAccessException {
        Class<?> cls = obj.getClass();
        for (Field field : cls.getDeclaredFields()) {
            if (field.isAnnotationPresent(antcls)) {
                if (antcls.isAssignableFrom(EmailAddress.class)) {
                    if (!isvalidemail(field.get(obj).toString())) {
                        try {
                            System.out.println("Anotation " + antcls.getName()
                                    + " validate is not pass for value:"
                                    + "class " + obj.getClass().getName()
                                    + " field " + field.getName() + ":"
                                    + field.get(obj).toString());
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }

    }
}

public class testAnnotation {

    public static void main(String[] args) throws IllegalArgumentException,
            IllegalAccessException {
        student s = new student(1, "yaoshuya", "[email protected]");
        System.out.println(student.class.isAssignableFrom(s.getClass()));
        emailValidator.checkEmailType(s, EmailAddress.class);
        // System.out.println(emailValidator.isvalidemail(s.email));
    }
}