Java 1.5引入了annotation,這個功能非常好用,是用c#等語言借鑒過來的一個特性。
首先編譯器本身支持一些像overrides,suPResswarning之類的注解。
Spring,junit等框架也自己寫并且處理自己定義的注解,讓java具有了一些聲明式編程的一些特點(diǎn),而且減少了代碼量。
下面的示例是一個簡單的自定義注解,自定義的注釋的處理需要自己去維護(hù)。
下面的應(yīng)用寫得不好,例如在web編程中,我們可以根據(jù)java bean的一些fields的注解,自動生成相應(yīng)的Structs驗證標(biāo)簽之類的
可以更快捷地完成jsp頁面的開發(fā)。
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", "yaoshuya@ss.dd.dfd..com"); System.out.println(student.class.isAssignableFrom(s.getClass())); emailValidator.checkEmailType(s, EmailAddress.class); // System.out.println(emailValidator.isvalidemail(s.email)); }}新聞熱點(diǎn)
疑難解答