java 四元一次方程_Java注解/四大元注解

一、基本语法:

(1)public @interface 注解名字{};

(2)赋值:

1)String s1() default "hello world";

//可以不赋初始值;

2)String s2 = "hello world";

//1.8jdk以后;

//必须赋初始值;

二、支持的数据类型:

1)String;

2)八大基本数据类型;

3)任何类型的反射;

4)枚举类型;

5)注解类型;

6)以上所有类型的一维数组类型;

//任何类型不能设置为null,可以为"";

(1)@Retention:描述注解的生命周期;

参数:枚举 RetentionPolicy

1)source:源码级别,编译后失效;

2)class:二进制级别,编译有效,运行失效;

3)runtime:运行时界别,该注解在运行时仍然有效;

(2)@Target:描述注解的位置

参数:枚举 ElementType

1)ANNOTATION_TYPE :注释类型声明

2)CONSTRUCTOR:构造方法声明

3)FIELD:字段声明(包括枚举常量)

4)LOCAL_VARIABLE:局部变量声明

5)METHOD:方法声明

6)PACKAGE:包声明

7)PARAMETER:参数声明

8)TYPE:类、接口(包括注释类型)或枚举声明

9)TYPE_PARAMETER:用于标注类型参数;//1.8

10)TYPE_USE:可以标注任何类型名称;//1.8

(3)@Documented:javadoc文档注解;

(4)@Inherited:自动继承注解;

四、反射获取注解的值:

1、注解类:

@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(value={ElementType.FIELD, ElementType.LOCAL_VARIABLE})public @interfaceMyAnnotation {

String value()default "";

}

2、domain

public classAnnotationTest {

@MyAnnotation(value= "hello")publicString s;publicString getS() {returns;

}public voidsetS(String s) {this.s =s;

}

@OverridepublicString toString() {return "AnnotationTest{" +

"s='" + s + '\'' +

'}';

}

}

3、反射获取注解的属性值:

public classGetAnnotationToField {public static void main(String[] args) throwsException{//创建反射对象;

Class> cls = AnnotationTest.class;//获取所有属性的反射对象;

Field[] fields =cls.getDeclaredFields();//根据反射对象创建实例;

Object newInstance =cls.newInstance();for (int i = 0; i < fields.length; i++) {

Field field=fields[i];//允许操作私有属性

field.setAccessible(true);//根据注释名获取注释对象;

MyAnnotation annotation = field.getAnnotation(MyAnnotation.class);//判断是否成功获取注释对象,如果不存在返回null;

if (annotation != null) {//.注释属性名,获取注释中值;

String value =annotation.value();//获取属性反射对象的属性类型;

Class> typeCls =field.getType();//如果属性类型等于String的反射对象,直接赋值;

if (typeCls == String.class) {

field.set(newInstance, value);

}else{//获取其它未知包装类的字符串构造方法,用于传入字符串构建包装类;

Constructor> constructor = typeCls.getConstructor(String.class);//执行构造,创建包装类;

Object fieldObj =constructor.newInstance(value);//设置参数;

field.set(newInstance, fieldObj);

}

}

}

System.out.println(newInstance);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值