gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:57:09 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com