sonarLint 抱怨 "Null pointers should not be dereferenced (squid:S2259)" 尽管处理了这种可能性
sonarLint complains "Null pointers should not be dereferenced (squid:S2259)" despite that possibility being handled
所以我有一个关于 SonarLint 的问题,我不知道如何处理。
假设我有一个 class 方法
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.) 分析这个 class 时,我得到一个 Null pointer should not be dereferenced 问题。
所以我的问题是。如何解决这个问题?
context.RaiseException
将停止方法执行,所以我认为这是误报。
应用程序有很多案例(classes/methods)有这个问题。
所以我认为注释是一种矫枉过正(到处都是丑陋的代码)
我也可以在每次 raiseException()
调用后键入 return,但我的印象不是 "programmers way"。
我猜最好是编写自己的规则。
我正在查看主题并四处搜索,但没有找到任何对这种情况有用的东西,当我不得不做 "opposite" 声纳实际做的事情时。
不是提出问题,而是对方法有点 "giving a green light"?
希望我对这个问题足够清楚。
如果RemoteContext
是你控制的class,而你真的不想使用通常的new ExceptionType(...)
模式,我会把RemoteContext
改成构建异常但不抛出它,然后
if (data == null) {
throw context.buildException("data can't be null");
}
...以便 SonarLint、Java 编译器以及稍后处理代码的程序员都清楚该方法的执行在该点停止(因为 "raise exception" 可以意味着很多事情)。
(是的,这意味着要更改很多地方,但相对简单的搜索和替换即可实现。)
没有真正优雅的方法来解决这个问题。什么有效:
public SomeException createAndThrow() {
throw new SomeException();
}
像这样使用:
throw createAndThrow();
给你点赞"double locking":
- 您的实用程序方法抛出...但万一它不会抛出
- 您假设异常对象只是 returned,所以让我们抛出那个
其他语言,比如C++甚至允许表达:这个method/function一般不支持return。但是 Java 不提供。
所以我有一个关于 SonarLint 的问题,我不知道如何处理。
假设我有一个 class 方法
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.) 分析这个 class 时,我得到一个 Null pointer should not be dereferenced 问题。
所以我的问题是。如何解决这个问题?
context.RaiseException
将停止方法执行,所以我认为这是误报。
应用程序有很多案例(classes/methods)有这个问题。
所以我认为注释是一种矫枉过正(到处都是丑陋的代码)
我也可以在每次 raiseException()
调用后键入 return,但我的印象不是 "programmers way"。
我猜最好是编写自己的规则。
我正在查看主题并四处搜索,但没有找到任何对这种情况有用的东西,当我不得不做 "opposite" 声纳实际做的事情时。 不是提出问题,而是对方法有点 "giving a green light"?
希望我对这个问题足够清楚。
如果RemoteContext
是你控制的class,而你真的不想使用通常的new ExceptionType(...)
模式,我会把RemoteContext
改成构建异常但不抛出它,然后
if (data == null) {
throw context.buildException("data can't be null");
}
...以便 SonarLint、Java 编译器以及稍后处理代码的程序员都清楚该方法的执行在该点停止(因为 "raise exception" 可以意味着很多事情)。
(是的,这意味着要更改很多地方,但相对简单的搜索和替换即可实现。)
没有真正优雅的方法来解决这个问题。什么有效:
public SomeException createAndThrow() {
throw new SomeException();
}
像这样使用:
throw createAndThrow();
给你点赞"double locking":
- 您的实用程序方法抛出...但万一它不会抛出
- 您假设异常对象只是 returned,所以让我们抛出那个
其他语言,比如C++甚至允许表达:这个method/function一般不支持return。但是 Java 不提供。