- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力改进我的代码,我从 Sonar 遇到了这个问题:
Remove this useless assignment to local variable "uiRequest"
事实是,它并非毫无用处,因为我在代码之后就使用了它:
// I am supposed to remove this
UiRequest uiRequest = null;
if("Party".equals(vauban.getName())) {
uiRequest = contextBuilder.buildContext(vauban);
} else {
// Maybe I could work my way around here ?
throw new NamingException(
String.format(
"Hey %s, change your name to %s, thanks",
vauban.getName(), "Vauban"));
}
// Set the generated Id in the result of context builder
MyOwnService response = callService(uiRequest, vauban);
return response;
Sonar 仍然告诉我“uiRequest”没用,为什么?它不是,因为如果它为空,我不希望它到达代码。我尝试初始化它 (uiRequest = new UiRequest()
),但它一直告诉我它没用。
有人知道为什么 Sonar 会这样/如何纠正吗?
最佳答案
您的问题简化为:
Foo x = null;
if(a()) {
x = b();
} else {
throw new Exception();
}
c(x);
这段代码有两条可能的路径:
a()
返回 true
。 x
被分配 b()
然后 c(x)
被调用。a()
返回 false
。抛出异常,c(x)
没有被调用。这些路径都没有使用 null
的初始赋值调用 c(x)
。因此,无论您最初分配什么,都是多余的。
请注意,如果初始分配不是 null,这也会是一个问题。除非赋值的右侧有副作用,否则任何赋值都会被浪费。 ( Sonar 分析副作用)
这对 Sonar 来说是可疑的:
您可以通过两种方式解决此问题:
首先只是删除 = null
,留下 Foo x;
- Java 足够聪明,可以实现所有到 c(x)
的路由涉及赋值,所以这仍然可以编译。
更好的是,将 c(x)
移到 block 中:
if(a()) {
Foo x = b();
c(x);
} else {
throw new Exception();
}
这在逻辑上是等价的,更简洁,并且减少了 x
的范围。缩小范围是一件好事。当然,如果你需要更大范围的x
,你就不能这样做了。
还有一个变体,逻辑上也是等价的:
if(! a()) {
throw new Exception();
}
Foo x = b();
c(x);
...对“提取方法”和“内联”重构 react 良好:
throwForInvalidA(...);
c(b());
使用最能传达您意图的那个。
关于java - Sonar "useless assignment to local variable"解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44115011/
我有一个正则表达式,它将检查字符串是否包含链接或网址(即https://eslint.org/docs/rules/no-useless-escape)。使用此正则表达式 /(\b(https?|ft
我正在使用事物 url 正则表达式验证,并且还在项目中集成了 eslint。 let url = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~
JSlint 提示不必要的转义字符,但我似乎无法弄清楚原因。这是我的正则表达式,有什么想法吗? 不必要的转义字符:[ no-useless-escape const _emailRegex = /^(
我想用像 Matlab 冒号运算符这样的运算符编写语法,其中“a:b”和“a:b:c”的含义略有不同。而且我更希望运算符是非关联的,因为“a:b:c:d”等没有意义。 这是我的语法的精简版,以展示我是
我有 2 个带边框的 TextView ,垂直和水平居中,并排放置,如下图所示: 在这两个 TextView 的每一个之上,我必须在左下角添加一个“T” TextView ,在右下角添加一个单位(“u
这是我完成的sql命令,我不明白为什么没有 key (〜1.45秒)和有 key (〜1.15秒)之间的差异这么小: mysql> show create table devis; | devis |
我已经为我的应用程序创建了一个颜色目录,并决定使用数组适配器来扩充这个目录。我的配色方案如下:
有没有办法创建一个无用的 Html 标签,它什么都不做(不影响格式、内容、间距,更像是一个空标签?是 span 还是 div? 我想在以下元素周围放置一个无用的标签。如果我在前后添加 span 或 d
我知道 :root 可以用来为 HTML 文件选择 html 标签,为 svg *) 在选择器 4 中具有零特异性。 关于html - 是:root really useless?,我们在Stack
我正在创建一个这样的函数: func foo(bar: UInt? = 0) { let doSomething = someOtherFunc(bar!) } 如果我向 foo() 传递一个 n
我在使用以下代码时遇到以下错误。我试图通过 Google 找出问题出在哪里,但没有找到任何有用的信息。 Compiling /home/tectu/projects/resources/chibios
我有一个 Ruby 函数,它返回调用者随后使用的单个变量,但是我收到以下警告 warning: assigned but unused variable 我整理了一个人为的例子,用“ruby -cw”
我正在查看以下 x86 汇编代码(Intel 语法): movzx eax, al and eax, 3 cmp eax, 3 ja loc_6BE9A0 在我的理解中,
这个问题在这里已经有了答案: How can I force WebKit to redraw/repaint to propagate style changes? (33 个答案) 关闭 7 年
我只需要检测不触发任何操作的点击。请参见下面的示例。 http://jsfiddle.net/SdNL5/1/ Your browser does not support the vid
我有以下布局 ... ... 我不明白为什么我会收到警告“This LinearLayout layout
我定义了一个 Debug类(类似于 Qt 中的 qDebug)与 operator class _Debug { public: template _Debug& operator()
假设我有一个对象 A 和扩展 A 的对象 B。B 具有与 A 无关的全局变量(一个数组和一些计数器)。 由于显式转换的成本很高(我不确定有多少),从纯粹的性能角度来看,只创建一个类 A 并仅在需要时创
我正在尝试使用只接受 n 的正奇数的 Ruby 函数打印基本三角形图案 def triangle(n, chars) puts "#{n} must be odd and positive"
我在我的 React 项目中的 app.js 文件中收到此错误:- Fragments 应该包含多个 child ——否则,根本不需要 Fragment react/jsx-no-useless-fr
我是一名优秀的程序员,十分优秀!