所以我对 SonarLint 有一个问题,我不知道如何处理。
假设我有一个带有方法的类
public class Class(RemoteContext context)
RemoteContext context = context;
public void String method(String data) {
if(data == null)
context.raiseException("data can't be null");
//do stuff with data like data.get();
}
当我用 sonarLint (3.2.) 分析这个类时,我得到一个 Null 指针不应该被取消引用的问题。
所以我的问题是。如何解决这个问题?
context.RaiseException
将停止方法执行,所以我认为这是一个误报。应用程序有很多案例(类/方法)有这个问题。
所以我认为注释是一种矫枉过正(到处都是丑陋的代码)
我也可以在每次
raiseException()
调用后键入 return,但我的印象不是“程序员的方式”。我猜写我自己的规则会是最好的。
我正在查看这些主题并在谷歌上搜索,但没有找到任何对这种情况有用的东西,当时我不得不做 Sonar 实际所做的“相反”。
不是提出问题,而是对方法“开绿灯”?
希望我对这个问题足够清楚。
最佳答案
如果 RemoteContext
是您控制的类,并且您真的不想使用通常的 new ExceptionType(...)
模式,我会更改 RemoteContext
以构建异常但不抛出它,然后
if (data == null) {
throw context.buildException("data can't be null");
}
...以便 SonarLint、Java 编译器和稍后处理代码的程序员很清楚方法的执行在该点停止(因为“引发异常”可能意味着很多事情)。
(是的,这意味着更改您拥有此功能的许多地方,但相对简单的搜索和替换即可实现这一点。)
关于java - sonarLint 提示 "Null pointers should not be dereferenced (squid:S2259)"尽管这种可能性被处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47534436/