java param 注解_Java注解类型(@Annotation)

Annotation 简介

a2498c336d69

image.png

系统内建的

a2498c336d69

a2498c336d69

package com.kaishengit.wanggs;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

public class Person {

public String getInfo() {

return "父类....";

}

}

class Son extends Person {

@Override // 此处明确指出方法复写操作

public String getInfo() {

return "子类!!!!";

}

}

class AnnotationDemo {

public static void main(String[] args) {

Person person = new Son();

System.out.println(person.getInfo());

// 子类!!!!

}

}

a2498c336d69

package com.kaishengit.wanggs;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

public class Person {

@Deprecated // 此处声明不建议使用操作

public String getInfo() {

return "父类....";

}

}

class Son extends Person {

public String getInfo() { // 编译时,将出现警告信息

return "子类!!!!";

}

}

class AnnotationDemo {

public static void main(String[] args) {

Person person = new Son();

// 编译时,将出现警告信息

System.out.println(person.getInfo());

// 子类!!!!

}

}

a2498c336d69

a2498c336d69

package com.kaishengit.wanggs;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

public class Demo {

private T var;

public T getVar() {

return var;

}

public void setVar(T var) {

this.var = var;

}

}

class DemoTest {

@SuppressWarnings("unchecked")

public static void main(String[] args) {

Demo demo = new Demo();

demo.setVar("tom");

System.out.println(demo.getVar());

}

}

a2498c336d69

image.png

package com.kaishengit.wanggs;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

@Deprecated

public class Demo {

private T var;

public T getVar() {

return var;

}

public void setVar(T var) {

this.var = var;

}

}

class DemoTest {

@SuppressWarnings({"unchecked","Deprecated"}) // 此处压制两条警告

// @SuppressWarnings(value = {"unchecked","Deprecated"})

public static void main(String[] args) {

Demo demo = new Demo();

demo.setVar("tom");

System.out.println(demo.getVar());

}

}

a2498c336d69

a2498c336d69

a2498c336d69

自定义Annotation

package com.kaishengit.wanggs;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

public @interface MyDefaultAnnotationNoneParam { // 定义Annotation

}

@MyDefaultAnnotationNoneParam // 使用自定义Annotation

class AnnotationDemos {

}

a2498c336d69

package com.kaishengit.wanggs;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

public @interface MyDefaultAnnotationNoneParam { // 定义Annotation

public String value();

}

@MyDefaultAnnotationNoneParam("tom") // 使用自定义Annotation

class AnnotationDemos {

}

设置多个属性

package com.kaishengit.wanggs;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

public @interface MyDefaultAnnotationNoneParam { // 定义Annotation

public String key();

public String value();

}

@MyDefaultAnnotationNoneParam(key="name",value = "tom") // 使用自定义Annotation

class AnnotationDemos {

}

传递多个可以定义一个数组

package com.kaishengit.wanggs;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

public @interface MyDefaultAnnotationNoneParam { // 定义Annotation

public String[] value();

}

@MyDefaultAnnotationNoneParam(value = {"tom","jack"}) // 使用自定义Annotation

class AnnotationDemos {

}

设置默认值

a2498c336d69

package com.kaishengit.wanggs;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

public @interface MyDefaultAnnotationNoneParam { // 定义Annotation

public String key() default "name";

public String value() default "tom";

}

@MyDefaultAnnotationNoneParam()

// 使用自定义Annotation

class AnnotationDemos {

}

使用枚举限制类型

package com.kaishengit.wanggs;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

enum MyName {

TOM, JACK;

}

public @interface MyDefaultAnnotationNoneParam { // 定义Annotation

public MyName name() default MyName.JACK; // 只能设置枚举中的取值

}

@MyDefaultAnnotationNoneParam(name = MyName.JACK)

// 使用自定义Annotation

class AnnotationDemos {

}

a2498c336d69

a2498c336d69

image.png

通过反射取出Annotation

a2498c336d69

package com.kaishengit.wanggs;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

public class SimpleBeanOne {

@SuppressWarnings("unchecked")

@Deprecated

@Override

public String toString() {

return "Hello Word";

}

}

package com.kaishengit.wanggs;

import java.lang.annotation.Annotation;

import java.lang.reflect.Method;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

public class ReflectDemo01 {

public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {

Class> c = null;

// 取得class实例

c = Class.forName("com.kaishengit.wanggs.SimpleBeanOne");

// 获取头string方法

Method method = c.getMethod("toString");

// 获取全部Annotation

Annotation annotations[] = method.getDeclaredAnnotations();

for (Annotation annotation : annotations){

System.out.println(annotation);

}

}

/**

* @java.lang.Deprecated()

*

* toString方法虽然有3个Annotation注解,但是最后真正的只有一个,这是因为Deprecated 用的是RUNTIME的声明,所以只有它可以输出

*/

}

a2498c336d69

获取指定Annotation的内容

package com.kaishengit.wanggs;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

// * 此Annotation在类中执行依然有效

@Retention(value = RetentionPolicy.RUNTIME)

public @interface MyDefaultAnnotationNoneParam { // 定义Annotation

public String key() default "name";

public String value() default "tom";

}

package com.kaishengit.wanggs;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

public class SimpleBeanOne {

@SuppressWarnings("unchecked")

@Deprecated

@Override

// 使用自定义Annotation 并设置值

@MyDefaultAnnotationNoneParam(key = "keys",value = "jack")

public String toString() {

return "Hello Word";

}

}

package com.kaishengit.wanggs;

import java.lang.reflect.Method;

/**

* @author Wgs

* @version 1.0

* @create:2018/05/07

*/

public class ReflectDemo01 {

public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {

Class> c = null;

// 取得class实例

c = Class.forName("com.kaishengit.wanggs.SimpleBeanOne");

// 获取头string方法

Method method = c.getMethod("toString");

if (method.isAnnotationPresent(MyDefaultAnnotationNoneParam.class)) {

// 声明对象

MyDefaultAnnotationNoneParam mda = null;

// 取得自定义Annotation

mda = method.getAnnotation(MyDefaultAnnotationNoneParam.class);

String key = mda.key();

String value = mda.value();

System.out.println("key :" + key + "value:" + value);

}

}

/**

* key :keysvalue:jack

*

*/

}

a2498c336d69

@Targer

a2498c336d69

a2498c336d69

a2498c336d69

a2498c336d69

@Documented

a2498c336d69

a2498c336d69

a2498c336d69

a2498c336d69

a2498c336d69

总结

a2498c336d69

/** *自定义注解MyAnnotation */

@Target(ElementType.TYPE) //目标对象是类型

@Retention(RetentionPolicy.RUNTIME) //保存至运行时

@Documented //生成javadoc文档时,该注解内容一起生成文档

@Inherited //该注解被子类继承

public @interface MyAnnotation {

public String value() default ""; //当只有一个元素时,建议元素名定义为value(),这样使用时赋值可以省略"value="

String name() default "devin"; //String

int age() default 18; //int

boolean isStudent() default true; //boolean

String[] alias(); //数组

enum Color {GREEN, BLUE, RED,} //枚举类型

Color favoriteColor() default Color.GREEN; //枚举值

}

@MyAnnotation(

value = "info",

name = "myname",

age = 99,

isStudent = false,

alias = {"name1", "name2"},

favoriteColor = MyAnnotation.Color.RED

)

public class MyClass {

//使用MyAnnotation注解,该类生成的javadoc文档包含注解信息如下:

/* @MyAnnotation(value = "info", name = "myname", age = 99, isStudent = false, alias = {"name1","name2"}, favoriteColor = Color.RED) public class MyClass extends Object */

}

public class MySubClass extends MyClass{

//子类MySubClass继承了父类MyClass的注解

}

/***********注解声明***************/

/** * 水果名称注解 */

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface FruitName {

String value() default " ";

}

/** * 水果颜色注解 */

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface FruitColor {

/** * 颜色枚举 */

public enum Color{BLUE, RED, GREEN};

/** * 颜色属性 * @return */

Color fruitColor() default Color.GREEN;

}

/** * 水果供应商注解 */

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface FruitProvider {

/** * 供应商编号 * @return */

public int id() default -1;

/** * 供应商名称 * @return */

public String name() default " ";

/** * 供应商地址 * @return */

public String address() default " ";

}

/***********注解使用***************/

public class Apple {

@FruitName("Apple")

private String appleName;

@FruitColor(fruitColor = FruitColor.Color.RED)

private String appleColor;

@FruitProvider(id = 1, name = "陕西红富士集团", address = "陕西红富士大厦")

private String appleProvider;

public String getAppleProvider() {

return appleProvider;

}

public void setAppleProvider(String appleProvider) {

this.appleProvider = appleProvider;

}

public String getAppleName() {

return appleName;

}

public void setAppleName(String appleName) {

this.appleName = appleName;

}

public String getAppleColor() {

return appleColor;

}

public void setAppleColor(String appleColor) {

this.appleColor = appleColor;

}

public void displayName(){

System.out.println(getAppleName());

}

}

/***********注解信息获取***************/

public class AnnotationParser {

public static void main(String[] args) {

Field[] fields = Apple.class.getDeclaredFields();

for (Field field : fields) {

//System.out.println(field.getName().toString());

if (field.isAnnotationPresent(FruitName.class)){

FruitName fruitName = field.getAnnotation(FruitName.class);

System.out.println("水果的名称:" + fruitName.value());

}else if (field.isAnnotationPresent(FruitColor.class)){

FruitColor fruitColor = field.getAnnotation(FruitColor.class);

System.out.println("水果的颜色:"+fruitColor.fruitColor());

}else if (field.isAnnotationPresent(FruitProvider.class)){

FruitProvider fruitProvider = field.getAnnotation(FruitProvider.class);

System.out.println("水果供应商编号:" + fruitProvider.id() + " 名称:" + fruitProvider.name() + " 地址:" + fruitProvider.address());

}

}

}

}

/***********输出结果***************/

水果的名称:Apple

水果的颜色:RED

水果供应商编号:1 名称:陕西红富士集团 地址:陕西红富士大厦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值