Eclipse中没有出现的try-with-resources中的异常自我抑制错误

 孤独的李新_780 发布于 2022-12-24 09:03

我遇到了一个令人不安的情况,我希望Java抱怨(通过IllegalArgumentExceptionfrom Throwable.addSuppressed)两次抛出相同的异常,一次来自try-with-resources块,一次来自AutoCloseable类的close()例程.我在下面创建了一个简单的测试用例,突出了问题.

我使用以下代码运行JDK 1.7.0_65:

public class TestDoubleThrow {
    public static void main(String[] args) {
        class TestA implements AutoCloseable {
            RuntimeException e;
            public TestA(RuntimeException e) { this.e = e; }
            @Override public void close() { throw e; }
        }

        RuntimeException e = new RuntimeException("My Exception");
        try (TestA A = new TestA(e)) {
            throw e;
        }
    }
}

当我通过命令行编译并运行上面的代码时,我得到了预期的结果,这个错误表明我试图自我抑制和异常:

[coreys terminal]$ java TestDoubleThrow.java ; java TestDoubleThrow
Exception in thread "main" java.lang.IllegalArgumentException: Self-suppression not permitted
    at java.lang.Throwable.addSuppressed(Throwable.java:1043)
    at TestDoubleThrow.main(TestDoubleThrow.java:12)
Caused by: java.lang.RuntimeException: My Exception
    at TestDoubleThrow.main(TestDoubleThrow.java:9)

但是,当我从Eclipse构建并运行相同的代码时,我得不到相同的结果,我得到以下内容:

Exception in thread "main" java.lang.RuntimeException: My Exception
    at TestDoubleThrow.main(TestDoubleThrow.java:9)

我从命令行构建后删除了.class路径,以确保Eclipse重建它.从调试器运行我注意到从Eclipse开始,代码永远不会进入java.lang.Throwable.addSuppressed().

有趣的是,如果我从Eclipse构建类,那么从命令行运行它我不会看到自我抑制错误.类似地,如果我从命令行构建类并从Eclipse运行它(无需从Eclipse构建),那么我会看到错误.这表明eclipse如何构建课程是有趣的.

我想知道如何确保Eclipse能够以这样的方式构建类,以便我得到错误,因为出于我的目的,这是一个错误,我希望能够在从Eclipse构建和运行时检测它.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有