我很困惑@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就会停止投掷警告。同样,我们可以使用“未选中”,“弃用”等。那么它是如何工作的?我的意思是我们在@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 {};
}
答案 0 :(得分:1)
注释没有做任何事情。它就在源代码中。
Eclipse编译器,当它在方法(或类或构造函数等)上看到它时,根本不会发出它通常会发出的一些警告,具体取决于{{1注释的属性。
为什么方法的名称是value()
因为注释的设计者选择了属性名称。它可以被命名为任何东西。使用&#34;值&#34;的优势正如它的名字一样,它允许写作
value
而不必写
@SuppressWarnings("unused")
关于默认关键字:
@SuppressWarnings(value = "unused")
这仅表示如果您没有明确指定注释的消息属性的值,则其值为String message() default "My Default Message";
。
答案 1 :(得分:0)
你问的是两个不同的问题。我会单独回答。
一旦我们通过&#34;未使用&#34;作为一个参数,日食停止投掷警告。同样,我们可以使用&#34;未选中&#34;,&#34;弃用&#34;那么它是如何工作的?
"My Default Message"
是一个特殊的注释,因为java编译器知道它。当编译编译类并发现警告时,它会查看该代码上是否有任何@SuppressWarning
注释,如果是,那么它应该抑制什么警告。有一个字符串名称到编译器警告的映射,因此它知道哪些警告不打印出来。这是我在另一个SO问题中找到的列表:
What is the list of valid @SuppressWarnings warning names in Java?
Eclipse会不断编译您的代码,因此它会看到您的@SuppressWarning并在触发重新编译时开始忽略警告(通常在保存时)
有时候我们可以看到@interface中的默认值如下所示。那么默认是什么?
默认值是用户未指定值的默认值。因此,在您的示例中,您可以指定如下消息:
@SuppressWarning
如果您没有指定@MyInf(message="my custom message")
之类的邮件,则邮件设置为@MyInf