SonarLint 1.0.0 for Eclipse在我的代码中标记了一个关键问题,我不知道为什么以及如何修复它。对我来说,这真的像是假阳性,还是我遗漏了什么?
import org.apache.log4j.Logger;
[...]
public final class Foo {
private static final Logger logger = Logger.getLogger(Foo.class);
[...]
public static void foo() {
MyCommand command = new MyCommand(foo, bar);
try {
commandService.executeCommand(command);
} catch (CommandException e) {
logger.error("My command execution failed", e);
}
}
[...]
以下是匹配SonarLint规则描述的摘录:
处理捕获的异常时,应记录原始异常的消息和堆栈跟踪或向前传递。
// Noncompliant - exception is lost try { /* ... */ } catch (Exception e) { LOGGER.info("context"); } // Noncompliant - exception is lost (only message is preserved) try { /* ... */ } catch (Exception e) { LOGGER.info(e.getMessage()); } // Noncompliant - exception is lost try { /* ... */ } catch (Exception e) { throw new RuntimeException("context"); }
try { /* ... */ } catch (Exception e) { LOGGER.info(e); } try { /* ... */ } catch (Exception e) { throw new RuntimeException(e); } try { /* ... */ } catch (RuntimeException e) { doSomething(); throw e; } catch (Exception e) { // Conversion into unchecked exception is also allowed throw new RuntimeException(e); }
在我看来,我的代码符合给定兼容解决方案的第一个变体,但是SonarLint不接受它。
不久前还讨论了声纳规则S1166,但实际上与我讨论的问题不同。
编辑:回答下面的问题:我使用log4j进行日志记录。我扩展了代码以反映这一点。
实际上,您正在记录原始异常的消息和堆栈跟踪;这是一个错误的发现。
规则可能没有Log4j的特定知识,但是缺乏对所有日志库的全知,将异常作为参数传递就足够了。
我试图使java编译类文件,但它抛出了一个错误,如何修复它。
我拿不到输出。。有人能帮我得到输出吗 下面给出了程序运行的示例(注意:下面的粗体文本是用户输入的输入): 进入三角形的三个边
问题内容: 我来自C ++,所以我不太了解Java的一项功能。我已经读过,除原始元素外,所有对象都必须使用关键字创建。现在,如果编译器可以识别原始类型,并且不允许您创建一个不带构造函数的对象,那么为什么根本没有关键字呢?有人可以提供一个示例,说明两行代码,除了存在的,相同,编译且具有不同的含义/结果之外,相同吗? 只是为了澄清我的意思是多余,并希望使我的问题更清楚。是否添加任何东西?语言是否可以通
**这是我的java代码,预期输出如下: 输入第一个数字:25 输入第二个数字:5 25 x 5=125 在我插入代码并运行它之后,输出与答案相差太大 以下是输出: 如何修复我的代码?
问题内容: 因此,我正在尝试使用a 将自己的值映射到一个值。我的对象在下面(为简洁起见删除了一些代码) 我通过从文本文件加载数据将一堆这些对象映射为字符串。稍后,基于(独立)用户输入,我尝试使用Object 查询。containsKey()返回false,而get()返回null,就好像我从未将密钥添加到映射中一样。但是,奇怪的是,如果我使用迭代在地图上下面的代码(其中是从用户输入制造) 我为代码
本文向大家介绍java中的异或问题代码解析,包括了java中的异或问题代码解析的使用技巧和注意事项,需要的朋友参考一下 java的位运算符中有一个叫异或的运算符,用符号(^)表示,其运算规则是:两个操作数的位中,相同则结果为0,不同则结果为1。下面看一个例子: 运行结果是:i^j=13. 分析上面程序,i=15转成二进制是1111,j=2转成二进制是0010,根据异或的运算规则得到的是1101,转