读书人

java引文

发布时间: 2012-08-22 09:50:34 作者: rapoo

java注解

注解,是未来技术的先驱者,会带来一股风暴的,很多框架已经运用了注解,反射,其中不乏hibernate,spring这样的赫赫有名的框架,该知识的精华在于可以很干练的表示某个类的所属的信息,从而利用反射,可以达到事半功倍的效果

?

这里以常用的生活例子,写注解的运用。

解释:有一个学生的注解,该注解包含学生的一些信息,其他类加载该注解时,可以设置响应的属性信息,从而判断其他类的信息,这就等于给该类加上了一种学生标签,类其实也是具体的准确理解这句话,那么注解,就很好理解了

?

?

?

首先是一个学生类的注解:

?

package com.study.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;//元注解@Retention(RetentionPolicy.RUNTIME)//注解的生命周期@Target({ElementType.TYPE,ElementType.METHOD})//注解的运用场合(接口,类,枚举,方法,字段等等)public @interface StuAnnotation {String value() default "test";//可以设置默认值,当只有一个value方法时,在运用此注解时,只需要填写值String id() default "000";//默认值int age();//年龄String[] hobbys();//学生爱好,数组爱好ClassList whichClass();//所属班级,枚举类型SchoolAnnotation school();//所属学校,注解类型Class<?> isStu();//是否是学生,class类型}
?

?

其次是该类所包含的班级枚举,学校类的注解,

?

package com.study.annotation;//班级枚举,三个班级public enum ClassList {jk1,jk2,jk3}

?

?

学校类的注解:

?

package com.study.annotation;public @interface SchoolAnnotation {String schoolName() ;}
?

?

?

然后一个类,加载该注解,不妨命名为Student类

?

?

package com.study.annotation;//设置学生信息,即加载注解信息@StuAnnotation(age = 22, hobbys = { "football", "music", "acm" }, whichClass = ClassList.jk3, school = @SchoolAnnotation(schoolName = "xxx大学"), isStu = Student.class)public class Student {public void doSth(){System.out.println("i am a student");}}
?

?

最后是一个测试类

?

?

package com.study.annotation;public class MainTest {public static void main(String[] args) {if (Student.class.isAnnotationPresent(StuAnnotation.class)) {// 判断是否有StuAnnotation的注解StuAnnotation stuAnnotation = Student.class.getAnnotation(StuAnnotation.class);// 如果有注解,返回注解的属性// 返回各个属性信息String value = stuAnnotation.value();String id = stuAnnotation.id();int age = stuAnnotation.age();String[] hobbys = stuAnnotation.hobbys();ClassList whichClass = stuAnnotation.whichClass();SchoolAnnotation schoolAnnotation = stuAnnotation.school();String schoolName = schoolAnnotation.schoolName();// 注解信息,向上再寻一层Class<?> clazz = stuAnnotation.isStu();// 输出信息FSystem.out.println("-----该类信息如下-----");System.out.println("value:" + value);System.out.println("id:"+id);System.out.println("age:"+age);System.out.print("hobby:[");for(String hobby:hobbys){System.out.print(hobby+"\t");}System.out.println("]");System.out.println("whichClass:"+whichClass);System.out.println("schoolName:"+schoolName);if(clazz.equals(Student.class)){System.out.println("是否是学生:"+"是");}else{System.out.println("是否是学生:"+"否");}}}}
? 1 楼 masuweng 2012-05-30 写的不错哦

读书人网 >编程

热点推荐