【问题标题】:Throwing checked exception as unchecked. Is there any way to prevent in runtime?将已检查异常作为未检查抛出。有没有办法在运行时防止?
【发布时间】:2015-04-14 06:08:41
【问题描述】:

使用简化的代码,我可以在不捕获的情况下抛出 Checked Exception(与 uncheked 相同的方式)。从 javadoc 关于 RuntimeException - 编译时异常检查。有什么方法可以防止运行时的行为?

import java.io.IOException;

public class TestException {

    static <E extends Exception>

    void doThrow(final Exception e) throws E {
        throw (E) e;
    }

    public static void main(String[] args) {
        TestException.<RuntimeException>doThrow(
              new IOException("Checked exception thrown")
        );
    }

}

【问题讨论】:

  • 请注意,编译器会警告您,执行这种未经检查的强制转换可能会在脚上开枪。

标签: java exception checked unchecked


【解决方案1】:

是的,将方法签名更正为:

static <E extends Exception> void doThrow(final E e) throws E {
    throw e;
}

【讨论】:

  • +1 当然我可以更正签名,但目标有点不同。该方法允许程序员将已检查的异常作为未检查的方式抛出。这个例子只是用来展示如何抑制编译时问题。
  • 那么的目标是什么?如果目标是允许程序员抛出未经检查的异常,请保持原样。如果目标是阻止它们,请按上述方法进行修复。
  • 目标是防止抛出 Checked Exception 为 unchecked。当然我可以修复签名,但程序员可以像上面那样编写自己的 doThrow 方法来抑制仅编译时间的限制。
  • @StanislavL 保护您的代码免受恶意编码器攻击的解决方案不是技术性的。如果您有开发人员故意这样做,您应该与他们进行认真的对话,并考虑不再让他们接触代码。
  • @StanislavL 在那种情况下,我不明白这个问题。可能存在什么样的解决方案?如果这是语言允许的,那就是语言允许的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2019-09-20
  • 1970-01-01
  • 2011-03-10
  • 2016-10-16
  • 2019-10-01
相关资源
最近更新 更多