如果方法无法抛出已声明的已检查异常,则为错误配置 Java 编译器
Configure Java Compiler for Error if method cannot throw declared checked Exception
在Java中,尝试捕获未在try块中抛出的异常是编译时错误,但声明抛出的已检查异常不是编译时错误在一个方法中,即使该方法没有并且实际上不能抛出该异常。
但是,在 eclipse 中,可以通过编译器配置更改此设置 (http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Freference%2Fpreferences%2Fjava%2Fcompiler%2Fref-preferences-errors-warnings.htm)。
是否可以通过编译器标志在标准 java 编译过程中产生同样的行为?具体来说,我想将此检查集成到 Maven 构建中。不能抛出的已声明异常会产生不必要的 catch 块、错误处理程序,甚至单元测试,这些都会分散对现有代码的进一步调试和扩展的注意力,并产生浪费的、不必要的努力来捕获和测试这些异常。
我们可以通过 java 编译器强制执行 "cleaner" 编码标准吗?
Can we enforce a "cleaner" coding standard via the java compiler?
对于 Java 到 Java 9 的版本,答案是否定的。或者至少,javac
手册是这样告诉我的(7、8 和 9 ).
确定这一点的方法是启用所有警告 (-Xlint:all
) 并查看您是否收到冗余 throws
子句的警告消息。
实际上:
In Java, it is a compile-time error to attempt to catch an exception that is not thrown in the try block ...
这仅适用于已检查的异常。在许多情况下,编译器无法判断是否可以抛出未经检查的异常。
在Java中,尝试捕获未在try块中抛出的异常是编译时错误,但声明抛出的已检查异常不是编译时错误在一个方法中,即使该方法没有并且实际上不能抛出该异常。
但是,在 eclipse 中,可以通过编译器配置更改此设置 (http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Freference%2Fpreferences%2Fjava%2Fcompiler%2Fref-preferences-errors-warnings.htm)。
是否可以通过编译器标志在标准 java 编译过程中产生同样的行为?具体来说,我想将此检查集成到 Maven 构建中。不能抛出的已声明异常会产生不必要的 catch 块、错误处理程序,甚至单元测试,这些都会分散对现有代码的进一步调试和扩展的注意力,并产生浪费的、不必要的努力来捕获和测试这些异常。
我们可以通过 java 编译器强制执行 "cleaner" 编码标准吗?
Can we enforce a "cleaner" coding standard via the java compiler?
对于 Java 到 Java 9 的版本,答案是否定的。或者至少,javac
手册是这样告诉我的(7、8 和 9 ).
确定这一点的方法是启用所有警告 (-Xlint:all
) 并查看您是否收到冗余 throws
子句的警告消息。
实际上:
In Java, it is a compile-time error to attempt to catch an exception that is not thrown in the try block ...
这仅适用于已检查的异常。在许多情况下,编译器无法判断是否可以抛出未经检查的异常。