【Leetcode】722. Remove Comments

《跟二师兄学Nacos吧》EXT-02篇 面试官问工厂模式,你理解的对吗?

  返回  

Java注解和反射 02 内置注解元注解自定义注解

2021/7/21 6:39:27 浏览:

1.2 内置注解


  • @Override:定义在 java.lang.Override 中,此注解只适用于修辞方法,表示一个方法声明打算重写超类中国的另一个方法声明。
  • @Deprecated:定义在 java.lang.Deprecated 中,此注解可以用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素,通常是已被唾弃,过时的不好用的元素才会 有 @Deprecated 标识着。
  • @SuppressWarnings:定义在 java.lang.SuppressWarnings 中,用来抑制编译时的警告信息。

@SuppressWarnings 与 前两个注解有所不同,你需要添加一个参数才能正确的使用它,这些参数都是已经定义好的。我们只要选择性使用就好了。

  • @SuppressWarnings(“all”)
  • @SuppressWarnings(“unchecked”)
  • @SuppressWarnings(value={“unchecked”,“deprecation”})//多个参数的传递。
  • 等等 …

    举个例子:在没有 写 抑制警告的时候:
    在这里插入图片描述写了抑制警告后,警告就被一直下去了!!在这里插入图片描述
  • SuppressWarnings 源码简单解释
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package java.lang;

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

@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.CONSTRUCTOR, ElementType.LOCAL_VARIABLE, ElementType.MODULE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
    String[] value();
}

@Target 是该 注解针对的目标类型有 !(这属于元注解)
String[] value(); 是参数的类型和参数。


1.3 元注解

  • 元注解的作用就是负责注解其它注解!Java定义了 4个 标准的 meta-annotation 类型,它们被用来提供 对其它 annotation 类型作说明。
  • 这些类型和它们所支持的类在 java.lang.annotation 包中可以找到(@Target,@Retention,@Documented,@Inherited)
  1. @Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方,它作用的目标 都有哪些??)

  2. @Retention:表示需要在什么级别保存该 注解信息,用于描述注解的生命周期(SOURCE < CLASS < RUNTIME
    SOURCE:只对当前的源文件范围内,注解有效,编译为 CLASS 文件后,就没效了。
    CLASS:编译为 CLASS文件后 仍然有效!编译成dex文件将舍弃该注解。 (即SOURCE时候,注解也是有效的!!)
    RUNTIME:在运行时 注解仍然有效。(即CLASS、SOURCE时候注解都是有效的!!)

  3. @Document:说明该注解将被包含在 JavaDoc 中

  4. @Inherited:说明子类可以继承父类中的该注解。就是如果出现了继承,父类里面有用到注解的,而这个注解 还被 Inherited 说明,那么 子类也肯定会继承这个注解!!!


1.4 自定义注解

  • 使用 @interface 可以自定义注解,原理是(自动成为了 java.lang.annotation.Annotation 接口 的实现,所以才可以 自定义注解的!)
  • 分析:
  1. @interface 用来声明一个注解,格式 public @interface 注解名{定义内容}

  2. 其中长的很像方法的东西 实际上是声明的 一个配置参数。

  3. 参数格式:类型 参数名();

  4. 参数的类型(只能是 基本类型 Class,String,enum…等等)。

  5. 可以通过 default 来声明 参数的默认值 是什么
    类型 参数名() default 默认值;

  6. 如果只有一个参数成员,一般参数名 为 value,这样的话我们在使用 该注解的时候,参数名 可以默认不写,只需要写参数值即可。

  7. 注解参数必须要有值,我们定义注解元素时,经常使用 空字符串,0 作为默认值。

  • 参数有默认值的情况
package www.muquanyu.annotation;

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

public class 元注解练习 {

    @MyAnnotation
    public static void main(String[] args) {

    }

}

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
    String name() default "";//默认值 "" 的 String name 参数
    int age() default 0;//默认值 0 的 int age 参数
}

在这里插入图片描述

  • 没有默认值的情况
package www.muquanyu.annotation;

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

public class 元注解练习 {

    @MyAnnotation
    public static void main(String[] args) {

    }

}

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
    String name() default "";//默认值 "" 的 String name 参数
    int age() default 0;//默认值 0 的 int age 参数
    int num();//没有默认值 你就必须要 写 参数值
}

在这里插入图片描述
只有写上 参数的 值 它才能放过你。。。
在这里插入图片描述

  • 只有一个参数的时候 不用 value 作为参数名
package www.muquanyu.annotation;

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

public class 元注解练习 {

    @MyAnnotation("sss")
    public static void main(String[] args) {

    }

}

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
    String name() default "";//默认值 "" 的 String name 参数
    
}

在这里插入图片描述
它会 提示你,当一个 参数的时候,你的 参数名 必须是 value 才能够 这样子 直接 写 参数值。否则只能 参数名 = 参数值。在这里插入图片描述

  • 一个参数时 参数名为 value
package www.muquanyu.annotation;

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

public class 元注解练习 {

    @MyAnnotation("sss")
    public static void main(String[] args) {

    }

}

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
    String value() default "";//默认值 "" 的 String name 参数

}

在这里插入图片描述
注解参数 本质上是 方法,所以 它可能 会提示你 关于 方法 怎么怎么样,而不提示你 关于 注解参数 如何如何。你只需要 知道 这个东西 是注解 参数。而不是 方法() 别弄混淆 即可!

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号