首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java 引语

2012-08-21 
java 注解1 注解是一种元数据,可以给代码元素添加信息。这个信息可以在后面的某些处理被用上。2 java提供了

java 注解

1 注解是一种元数据,可以给代码元素添加信息。这个信息可以在后面的某些处理被用上。

2 java提供了三种内置的注解@Override、@Deprecated、@SuppressWarnings,这几个注解都可以被编译器使用于警告一些编码问题。

3 注解机制包含了三个元注解

a?@Target,表示注解的代码元素,包括构造器、方法、域、局部变量等。

b?@Retention,表示注解的保鲜期,SOURCE级的只在源代码中,编译器会丢弃;CLASS级的编译后在class文件中保持,但是jvm会丢弃;RUNTIME级的在运行时刻也保持,可以通过反射读取到。

c ?@Documented ?生成的java doc文档中会包含注解。

d?@Inherited ?注解会被子类继承。

?

?

4 下图是一个注解的定义,类似接口,加上了@ ? ? ?(如果Retention不是runtime,那么testAnnotation就拿不到注解)

?

@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface UseCase {public int id();public String description() default "no description";} // /:

?

?注解元素,即类似域,只能是基础数据类型、String、Class、Enums、Annotations,以及他们的数组。

?

注解的强大之处在于,可以通过反射机制读出注解内容,进行特殊处理,这是一种很好的解耦方式,以较低的代码侵入性,获得更多功能。

?

?

public class PasswordUtils {@UseCase(id = 47, description = "Passwords must contain at least one numeric")public boolean validatePassword(String password) {return (password.matches("\\w*\\d\\w*"));}@UseCase(id = 48)public String encryptPassword(String password) {return new StringBuilder(password).reverse().toString();}@UseCase(id = 49, description = "New passwords can’t equal previously used ones")public boolean checkForNewPassword(List<String> prevPasswords, String password) {return !prevPasswords.contains(password);}}
?

?

?

?

@Testpublic void testAnnotation() throws IOException, InterruptedException {for (Method m : PasswordUtils.class.getDeclaredMethods()) {UseCase uc = m.getAnnotation(UseCase.class);if (uc != null) {System.out.println("Found Use Case:" + uc.id() + " " + uc.description());}}}
?

?

反射的基础对象Class、Method、Field都实现了getAnnotation接口

?

5 注解元素必须要有值,要么在声明的时候指定默认值,要么在使用的时候赋值

?

6 关于apt,用于利用注解生成源文件的附属文件的便捷工具,具体可以参考http://hi.baidu.com/51gzmy/item/604cc309b7c8671aebfe3806

?

?

?

?

?

?

?

热点排行