Sonar问题汇总

一、背景

      最近公司开始实行sonar了,也就是代码检测,保证上传服务器的必须是较高质量的代码。于是乎,之前觉得还不错的代码,一检测就是多个不合格的地方。。。。,所以在这里对遇到sonar 检测不通过的问题做一个汇总。

二、汇总

1、This field is never read.  Consider removing it from the class.:这个字段一直没被使用到,建议删除(字段上的意思,定义的一个字段没有使用到)

2、Remove this commented out code:删除这些注释代码。

原因:不应该注释代码,因为这会使程序更加臃肿,不用的代码应该删除。

3、Invocation of toString on .......handleMessage(Message):在 handleMessage(Message) 里调用 toString()。

原因:代码在数组上调用toString() 的话,实际上得到的是一个地址。可以使用Arrays.toString将数组转换为可读的String,该String提供数组的内容。参见《编程难题》,第3章,难题12。

问题1、Switch statement found in com.wt.emode.fragment.AudioTestFragment.onClick(View) where default case is missing

(switch语句在AudioTestFragment.onClick(View)这个地方缺少了default语句)。

规则:This method contains a switch statement where default case is missing. Usually you need to provide a default case.
Because the analysis only looks at the generated bytecode, this warning can be incorrect triggered if the default case is at the end of the switch statement and the switch statement doesn't contain break statements for other cases.

(此switch语句方法缺少default case 。通常需要提供一个default case。

因为分析只查看生成的字节码,所以在switch语句的末尾这个deafult case没有break对于其它语句的话,则可能会触发此警告。)

修改:在switch 语句后面添加default case。

问题2、Add a nested comment explaining why this function is empty or complete the implementation

(添加一个嵌套注释,解释此函数为何为空或完成实现)

规则:There are several reasons for a function not to have a function body:

It is an unintentional omission, and should be fixed to prevent an unexpected behavior in production.

It is not yet, or never will be supported. In this case an exception should be thrown.
The function is an intentionally-blank override. In this case a nested comment should explain the reason for the blank override.

(函数没有函数体有几个原因:

这是无意的疏忽,应该加以纠正,以防止生产中出现意外行为。

它还没有,或者永远不会得到支持。在这种情况下,应该抛出异常。

该函数是有意为空的重写。在这种情况下,嵌套注释应该解释空白覆盖的原因。)

修改:1、如果是忘了写,应该加上方法体。

           2、如果该方法不存在或者永远不会被实现,则应该抛出异常。

           3、如果是故意不写的,就加上嵌套注释为什么为空。

问题3、Define a constant instead of duplicating this literal "USB is Not Mount!!!\n" 3 times.

(定义一个常量,而不是重复这个文字“USB不是挂载!!!\n“3次)

规则:Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.

On the other hand, constants can be referenced from many places, but only need to be updated in a single place.

Noncompliant Code Example With the default threshold of 3:

(重复的字符串文字使重构过程容易出错,因为必须确保更新所有出现的内容。

另一方面,常量可以从许多地方引用,但只需要在一个地方更新。

不符合代码示例 默认阈值为3:)

修改:将重复的文字定义为一个常量。

问题4、The code invokes toString on an array, which will generate a fairly useless result such as [C@16f0472. Consider using Arrays.toString to convert the array into a readable String that gives the contents of the array. See Programming Puzzlers, chapter 3, puzzle 12.

(代码在数组上调用toString,这将生成一个相当无用的结果,例如[C@16f0472. 考虑使用Arrays.toString 将数组转换为可读取的字符串,该字符串给出数组的内容。参见编程难题,第3章,难题12。)

规则:Invocation of toString on offLineData in com.wt.emode.car.extractor.S311MCAExtractor.getCarMode(byte[])

(在com.wt.emode.car.extractor.S311MCAExtractor.getCarMode(byte[]) 调用toString方法)

因为数组的toString() 方法实际得到的是一个地址,并没有实际意义。

修改:Arrays.toString(byte[]) 可以将byte[] 转化为String

问题5、Remove this conditional structure or edit its code blocks so that they're not all the same.

(删除此条件结构或编辑其代码块,使它们不完全相同。)

规则:Having all branches in a when or if chain with the same implementation is an error. Either a copy-paste error was made and something different should be executed, or there shouldn't be a when/if chain at all.
Noncompliant Code Example

(在when或if链中使用相同实现的所有分支都是错误的。要么是复制粘贴错误,应该执行不同的操作,要么根本不应该有when/if链。

不符合代码示例)

修改:when 分支语句里面的执行的逻辑是一样的,删除其中一句。

问题6、com.wt.emode.tboxregister.RegisterManager.sendRegResult(String) concatenates strings using + in a loop

(com.wt.emode.tboxregister.RegisterManager.sendRegResult(String)在循环中使用 “+” 连接字符串)

规则:The method seems to be building a String using concatenation in a loop. In each iteration, the String is converted to a StringBuffer/StringBuilder, appended to, and converted back to a String. This can lead to a cost quadratic in the number of iterations, as the growing string is recopied in each iteration.
Better performance can be obtained by using a StringBuffer (or StringBuilder in Java 1.5) explicitly.

(该方法似乎是在循环中使用串联来构建字符串。在每次迭代中,字符串都会转换为StringBuffer/StringBuilder,附加到字符串,然后再转换回字符串。这可能导致迭代次数的成本是二次的,因为在每次迭代中重新复制不断增长的字符串。

通过显式使用StringBuffer(或Java1.5中的StringBuilder),可以获得更好的性能。)

修改:使用StringBuilder 来代替String 中使用  "+"

问题7、A value is checked here to see whether it is null, but this value can't be null because it was previously dereferenced and if it were null a null pointer exception would have occurred at the earlier dereference. Essentially, this code and the previous dereference disagree as to whether this value is allowed to be null. Either the check is redundant or the previous dereference is erroneous.

(这里检查一个值,看它是否为null,但是这个值不能为null,因为它以前被取消引用过,如果它为null,那么在先前的取消引用时就会发生null指针异常。本质上,对于是否允许该值为null,此代码和前面的解引用不一致。检查是多余的,或者先前的解引用是错误的。)

规则:Nullcheck of TBoxFragment.mTBoxTestInfoTx at line 191 of value previously dereferenced in com.wt.emode.fragment.TBoxFragment.startTBoxConnectTest()

空检查TBoxFragment.mTBoxTestInfoTx 在先前在中取消引用的值的第191行com.wt.emode.fragment.TBoxFragment.startTBoxConnectTest()

修改:删除对该值的空检查。

待添加:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值