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", "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));
}
}

java Annotation Demo的更多相关文章

  1. Java Annotation概述

    @(Java)[Annotation|Java] Java Annotation概述 用途 编译器的相关信息,如用于检测错误和一些警告 编译时和部署时的处理,如一些软件用于自动生成代码之类的 运行时处 ...

  2. 转:Java Annotation详解

    转载自:http://william750214.javaeye.com/blog/298104 元数据的作用 如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致 ...

  3. Java Annotation详解 理解和使用Annotation

    系统中用到了java注解: 查了一下如何使用注解,到底注解是什么: (1)创建方法:MsgTrace Java Class==> 在Create New Class中: name:输入MsgTr ...

  4. Java Annotation详解

    元数据的作用 如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类: l          编写文档:通过代码里标识的元数据生成文档. l         ...

  5. Java Annotation 注解

    java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin ...

  6. paip.Java Annotation注解的作用and 使用

    paip.Java Annotation注解的作用and 使用 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog. ...

  7. Java Annotation认知(包括框架图、详细介绍、示例说明)

    摘要 Java Annotation是JDK5.0引入的一种注释机制. 网上很多关于Java Annotation的文章,看得人眼花缭乱.Java Annotation本来很简单的,结果说的人没说清楚 ...

  8. Java Annotation原理分析(一)

    转自:http://blog.csdn.net/blueheart20/article/details/18725801 小引: 在当下的Java语言层面上,Annotation已经被应用到了语言的各 ...

  9. Java Annotation 及几个常用开源项目注解原理简析

    PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 一.Annotation 示 ...

随机推荐

  1. 自定义动画方法animate

    animate的使用方法:animate(params,speed,callback); 例子:animate({ right: "-=600px",height:"+= ...

  2. 【JS复习笔记】03 继承

    关于继承 好吧,说到底JS还是原型继承的,而不是类继承.所以在这个上面要经常用到prototype去继承另一个对象. 所有的构造器函数都约定命名为首字母大写的形式,并且不以首字母大写的形式拼写任何其它 ...

  3. 数据库表被锁表,select会等待。

    SELECT * FROM dbo.Table_1 WITH(NOLOCK) 这样就可以不用等待,但数据读的是被锁之前的数据,表被锁了,肯定会有对表的update,delete操作. 如果对数据的准确 ...

  4. spring的懒加载

    在spring的IOC容器中,可以通过设置<beans default-lazy-init="XXX"></beans>来设置是否为懒加载模式,懒加载的意思 ...

  5. 泛函编程(23)-泛函数据类型-Monad

    简单来说:Monad就是泛函编程中最概括通用的数据模型(高阶数据类型).它不但涵盖了所有基础类型(primitive types)的泛函行为及操作,而且任何高阶类或者自定义类一旦具备Monad特性就可 ...

  6. 亲们! 首次见面! 带来不适!多多见谅!--------->>Bank系统

    亲们!您们好! 讲一下Bank系统的做法: 01.首先创建一个Card类 using System; using System.Collections.Generic; using System.Li ...

  7. 硅谷新闻1--引导界面GuideActivity

    1.红点切换间距 RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) iv_red_point.getLayoutPa ...

  8. mysql服务器的字符集

    文章:http://www.cnblogs.com/fantiantian/p/3468454.html 的评论中有这样的文字: 谢谢沧海一滴的总结 在Linux中一般都是UTF-8字符集.我们在建数 ...

  9. linux下firefox手工安装flash插件

    1. 前往adobe官网,下载flash安装包.下载.tar.gz安装包即可.2. 解压安装包,得到libflashplayer.so文件3. 新建文件夹,~/.mozilla/plugins4. 拷 ...

  10. Virtual Environments for mac

    A Virtual Environment is a tool to keep the dependencies required by different projects in separate ...