java 不必要@SuppressWarnings(“未使用”)

lh80um4z  于 2023-04-28  发布在  Java
关注(0)|答案(5)|浏览(191)

我在eclipse中收到了一个@SuppressWarnings注解的编译器警告:

@Override
public boolean doSomething(@SuppressWarnings("unused") String whatever) throws AnException {
    throw new AnException("I'm still in bed and can't do anything until I've had a shower!");
}

它看起来像一个黄色的波浪线下的单词“未使用”和鼠标悬停我得到的工具提示Unnecessary @SuppressWarnings("unused")
我认为另一个开发人员被eclipse提示放入这些注解,而我基本上被提示取出它们。如何配置eclipse来提示我放入@SuppressWarnings注解而不是它抱怨它?
如果有人想在这里对最佳做法发表评论,那也是非常欢迎的。

t3psigkw

t3psigkw1#

在您问题中的代码中,@SuppressWarnings("unused")注解是不必要的,因为该方法要么覆盖了超类中的另一个方法,要么实现了一个接口。即使你实际上没有使用whatever参数,也必须声明它,否则@Override注解将产生一个错误(如果你删除了参数,你将改变覆盖方法的签名)。)
在Eclipse的一些旧版本中,所示代码不会引起警告,但在最近的版本中会引起警告。我相信这是一个有效的警告,在这种情况下,我宁愿删除@SuppressWarnings("unused")

plicqrtu

plicqrtu2#

转到

  • 窗口 * → * 首选项 * → Java → * 编译器 * → * 错误/警告 * → * 注解 *。

并为Unused '@SuppressWarnings` token选择忽略

nbewdwxp

nbewdwxp3#

在我的代码中,没有使用@SuppressWarnings(“unused”)定义3个方法的继承
这段代码在Eclipse Juno(最新版本)中给出了“Unnecessary @SuppressWarnings(“unused”)”,但如果我删除@SuppressWarnings(“unused”),我会在IntelliJ IDEA 11中得到“Constructor/Method is never used”警告。1.3
这些方法并没有直接在项目中使用,只有第三方产品Jackson,JAXB和GSON使用,所以我认为IntelliJ是正确的。..

public class EmailUnsendable extends SkjemaError {

    private NestedCommand command;        // Can't be Command (interface) because of GSON!

    @SuppressWarnings("unused")            // Used by Jackson/JAXB/GSON
    public EmailUnsendable() {
    }

    public EmailUnsendable(String referenceNumber, String stackTrace, NestedCommand command) {
        super(referenceNumber, stackTrace);
        this.command = command;
    }

    @SuppressWarnings("unused")            // Used by Jackson/JAXB/GSON
    public NestedCommand getCommand() {
        return command;
    }

    @SuppressWarnings("unused")            // Used by Jackson/JAXB/GSON
    public void setCommand(NestedCommand command) {
        this.command = command;
    }
}

我认为这是Eclipse中的一个错误。

rsaldnfx

rsaldnfx4#

或者,如果您认为删除SuppressWarnings注解更正确:
窗口-〉首选项-〉Java -〉编译器-〉错误/警告-〉不必要的代码-〉未使用参数值
并选择【覆盖实现方法忽略】

xlpyo6sf

xlpyo6sf5#

虽然我同意你所说的,但在一些特定的情况下,除了使用这种方法之外别无选择。正如另一位同事所提到的,在项目中可能会间接使用不使用此方法的函数,在不了解其用途的情况下删除它可能会导致问题。
一个例子是使用@AssertTrue注解进行验证。下面的示例显示了添加的验证,以检查Status字段的可能值,但此方法由Spring使用,而不是从项目的任何其他部分调用。在这个场景中,我认为使用@SuppressWarnings("unused")注解没有什么害处。

@AssertTrue
@SuppressWarnings("unused")
private boolean isStatusValid() {

    if (this.status == null) {
        return true;
    }

    EnumSet<Status> acceptedStatuses = EnumSet.of(Status.A, Status.P);
    return EnumValidation.anyOf(status, acceptedStatuses);
}

相关问题