所以我对 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/

10-10 15:10