java - @SuppressWarnings 和其他自定义注释在内部如何工作?

标签 java annotations

我很困惑@SuppressWarnings 是如何在内部工作的。如果我们看到它的源代码,它是这样的:

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

现在,如果我们看到它在代码中实现,它就像是,

@SuppressWarnings({"unused"})
public static void main(String args[]){
int i;
}

所以问题是:-

1) 一旦我们将“unused”作为参数传递,eclipse 就会停止抛出警告。同样,我们可以使用 "unchecked", "deprecation"等。那么它是如何工作的呢?我的意思是我们在 @interface 中只有一个名为 value() 的方法,它的返回类型是 String[]。所以它做了一切,怎么做?为什么方法的名字是value()?此方法是否具有某些特殊意义,可以在内部执行某些操作以捕获诸如“未使用”之类的参数?

2) 有时我们可以看到在某些@interface 中有如下指定的默认值。那么什么是默认值?从 java8 开始,我们有了默认方法的新概念。但此默认值也用于较低版本的 java。这是如何工作的,它是什么?这是java8以下版本的关键字吗?

public @interface MyIntf{

    /**
     * The error message.
     */
    String message() default "My Default Message";

    /**
     * The group.
     */
    Class<?>[] groups() default {};

    /**
     * the payload.
     */
    Class<? extends Payload>[] payload() default {};
}

最佳答案

注释不做任何事情。它就在那里,在源代码中。

Eclipse 编译器,当它在方法(或类,或构造函数等)上看到警告时,只是不会发出一些通常会发出的警告,具体取决于 value< 中的内容 注释的属性。

why the name of method is value()

因为这是注释的设计者选择的属性名称。它可以被命名为任何东西。使用“值”作为它的名字的好处是它允许写

@SuppressWarnings("unused")

不用写

@SuppressWarnings(value = "unused")

关于默认关键字:

String message() default "My Default Message";

这只是意味着,如果您没有为注释的消息属性明确指定一个值,则它的值为"My Default Message"

关于java - @SuppressWarnings 和其他自定义注释在内部如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33308765/

相关文章:

java - 使用注释属性的方面切入点

java - 多个显示器的 Swing 参数

python - 设置注释在字符串轴上的位置

java - Rabbit MQ - 为什么我的设置不向所有客户端提供消息?

java - 打印部分屏幕

java - .net 上的 java servlet 等价物是什么

java - 在rest API中应用@OrderBy注释而不是排序

java - 类文件中的注释存储在哪里

java - @PreAuthorize注解码合

java - 通过反射获取java注解信息