【问题标题】:Howto activate eclipse java warning "unnecessary declaration of thrown exception" without getting false positives?如何在没有误报的情况下激活 eclipse java 警告“不必要的抛出异常声明”?
【发布时间】:2013-10-07 08:33:14
【问题描述】:

我讨厌声明抛出在任何情况下都不会被此函数抛出的异常的函数。如果在函数体中删除了 throw 语句而不将其从 throws 定义中删除,则会在重构中发生这种情况。

这就是为什么我激活设置 Java -> 编译器 -> 错误/警告 -> 不必要的代码 -> 抛出异常的不必要声明。

如果在接口或超级方法中定义了异常,这会导致误报警告。如果接口的实现 A 没有抛出一种异常类型,但实现 B 却抛出了异常类型,则 eclipse 会警告实现 A 中不必要的声明。对于超级方法和覆盖方法同样如此。这就是我激活子选项“忽略覆盖和实现方法”的原因。

到这里为止都很好。但我有相反的情况。被覆盖的方法抛出一个异常类型,该类型在 super 方法中没有使用。看这个最小的例子:

class Vehicle {
    protected int getStatus() throws GeneralException, StatusException {
        throw new GeneralException("One exception type in super type only");
    }
}

class Car extends Vehicle {
    @Override
    protected int getStatus() throws GeneralException, StatusException {
        throw new StatusException("Special case, that gets special handling");
    }
}

现在车辆中的 StatusException 在 Eclipse 中被警告。

当然有人可能会说这是糟糕的设计等等,但从实用的角度来看,这将再次发生,并且很可能人们可以接受不改变架构,而是简单地将新的异常类型添加到 super类型。 但是在这种情况下如何消除误报警告呢? 当然可以将子选项与 javadoc 一起使用,但这也会忽略大多数真正的肯定命中。另一种选择是添加 SuppressWarning 注释“未使用”,但其他用户可能会收到不需要的警告。

【问题讨论】:

  • 好吧,有些人认为所有异常都应该是未经检查的异常......
  • 这是一个很好的观点。在我的案例中,我没有看到检查异常的任何优势。但这是遗留代码,我不确定是否可以将所有内容更改为未选中。但这可能是它没有自己的子选项的原因,因为没有人再使用检查异常了?
  • “忽略覆盖和实现方法”的简单英文阅读是 that 选项应该做你想做的事。也许是 Eclipse 中的错误?
  • @Raedwald 虽然我不是母语人士,但我不这么认为。这就是为什么我将所有这些解释都放在问题中,因为从超类型的角度来看,这是一种不同的情况。如果您需要扫描超类型中的所有实现,它也会影响性能。因此,可能需要启动一项功能请求以手动停用每种异常类型的警告,例如@SuppressWarnings("unused") 可以执行例如在函数参数中。但这不是eclipse的特性请求,而是通用的java(编译器)吧?

标签: java eclipse exception


【解决方案1】:

我个人会激活警告设置下的第二个选项:“忽略记录的异常......”并且只是 记录那些:

/**
 * @throws GeneralException when general stuff goes wrong
 * @throws StatusException when status stuff goes wrong
 */
protected int getStatus() throws GeneralException, StatusException {
    throw new GeneralException("One exception type in super type only");
}

也许包含一个更有用的解释,但基本上可以归结为这一点。

【讨论】:

  • 我自己在问题中提到了可能的解决方案,并描述了为什么它对我来说没有解决方案。尽管如此,如果我知道如何停止在 javadoc 中自动填充 @throws,即如果我在函数之前输入 /** 并点击输入所有当前可能的 javadoc 标签,我什至会接受它。这就是为什么到处都记录了这一点,几乎完全没用......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多