Java注解进阶

本文介绍了Java中的泛型概念,包括泛型类、泛型对象、泛型通配符和泛型接口。同时,详细讲解了注解的使用,如元注解@Target、@Retention和@Documented的作用,并展示了自定义注解的创建和使用,包括注解的属性及数组类型的属性值。最后提到了API文档的生成。
摘要由CSDN通过智能技术生成

回顾:

1. 泛型:---限制类中成员的数据类型。
2. 定义泛型类的格式:
    public class 类名<泛型标志,标志....>{
        private 标志 属性;
    }
3. 创建泛型对象时: 需要指定泛型类型,如果没有指定,则认为Object类型。
4. 泛型通配符---泛型上限extends和泛型下限super。
5. 泛型接口---
6. 泛型方法。<标志>
7. 注解:
    [1]预定义注解。@Override  @FunctionInterface[检测接口中有且仅有一个抽象方法]
    [2]自定义注解 @interface 注解名{}    @注解名
    [3]元注解

目录:

1. 元注解
2. 自定义注解的高级

技术细节:

1. 元注解

使用在注解上的注解就是元注解。

@Target: 作用: 告诉该注解使用的范围,如果不加任何参数默认可以用在所有地方

*Target有哪些参数

 TYPE,可以使用在类上
 FIELD,使用在属性上
 METHOD,使用方法上
 PARAMETER, 使用在方法参数上
 CONSTRUCTOR, 使用在构造方法上  

@Retention: 作用: 该注解什么时候有效。默认: SOURCE

SOURCE: 源码时有效
CLASS: 字节码时
RUNTIME: 运行时有效。【采用的最多】

@Documented: 作用: 在代码生成api文档时是否存在该注解,

代码演示:

自定义注解:

package demo01;

public class Test01 {
}
//自定义注解
//语法 @interface + 注解名 my


//上方不加任何元注解,可以用在任何地方;如下:
@interface my{

}
@my   //可以用在方法上
class hello{
    @my   //可以用在属性上
    private String name;
    @my  //可以用在属性上
    public void show(){

    }
    public void print( @my String name){//可以用在方法参数上

    }
}

@Target作用

package demo01;

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

public class Test02 {
}

/**
 * @Target 表示该元注解可以使用的范围
 * TYPE 类上
 * 
 */
//元注解
@Target(ElementType.TYPE)
@interface me{//自定义注解

}
@me
class show{
    private String name;
    public void show(){

    }
    public void print( String name){

    }
}

 

生成api文档:

(避免中文乱码加上UTF-8)

 2. 自定义注解的高级

自定义注解的时候可以在定义的注解里面加上属性值。

@interface 注解名{

数据类型 属性名();

}

数据类型可以是哪些类型?

基本数据类型, 字符串类型,枚举类型,注解类型,以及上面这些类型的数组类型。


package demo01;
//枚举类
public enum MyEnum {
    BEIJING,NANJING,RIBEN;
}

-------------------
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation {
 int age(); //基本类型
 String name();//字符串类型
 MyEnum address();//枚举
 My my();//注解类型
 int[] ages();
 String[] names();
 //MyEnum[] addresss();
 //My[] mys();
}
-------------------
//如果属性为数组类型,给数组类型赋值时如果只有一个值那么可以省略{}
//如果该注解中只使用value属性,那么value属性名可以省略。
@MyAnnotation(age=15,name="张三",address = MyEnum.BEIJING,my=@My,ages={15,25,35},names="hello")
@My(value = "good",name="张学友")
public class Student {
 public void show(){
     System.out.println("hello");
 }
}

 *如果属性定义好后,在使用该注解是需要指定属性的值,(除非有默认值)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值