我很困惑@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/