IDEA Inspections详解
换成IDEA后,发现其代码检查功能更加复杂,遂仔细琢磨分析,寻找最适合自己的配置
Abstraction issues
Title |
默认 |
建议 |
描述 |
'instance of' a concrete class |
warning |
instance of一般判断是否是一个接口或者抽象类的实例 |
|
'instance of' check for this |
warning |
使用this肯定知道是哪个Class |
|
Magic number |
warning |
不允许任何魔法值(即未经定义的常量)直接出现在代码中 ,参考阿里规范 |
|
Overly strong type cast |
warning |
高强强制类型转换,有时候我们强转List即可却强转成ArrayList |
Assignment issues
Title |
默认 |
建议 |
描述 |
Assignment to for 'loop' parameter |
warning |
在for循环中改变了循环的参数 |
|
Constructor assigns value to field defined in superclass |
warning |
在构造方法中对父类成员变量赋值,这样做不合理,应该调用父类构造方法 |
Class Metrics
Title |
默认 |
建议 |
描述 |
Class with too many constructors |
warning |
类的构造方法过多(默认限制5个) |
Class structure
Title |
默认 |
建议 |
描述 |
Class name differs from file name |
warning |
类名和文件名不同 |
|
No-op method in abstract class |
warning |
抽象类中的空方法没有被声明成abstract,比较少见 |
|
'protected' member in final class |
warning |
定义成final的类无法被继承,protected的使用不正确 |
Code maturity
Title |
默认 |
建议 |
描述 |
Call to printStackTrace() |
warning |
成熟的代码应该使用log |
|
Call to Thread.dumpStack |
warning |
静态dumpstack()方法提供一个new exception ("stack trace").printstacktrace ()的封装,打印一个追踪当前线程的堆栈,调试用。 |
|
Use of absolute collection type |
warning |
使用了java.util.Vector or java.util.Hashtable这些不推荐使用的类 |
|
Use of System.out or System.err |
warning |
使用了System.out or System.err,用log替代 |
Code style issues
Title |
默认 |
建议 |
描述 |
Blocker marker comment |
warning |
注释位置不合理 while (i < 10) { |
|
C-style array declaration |
No high lighting,only fix |
warning |
C语言风格的数组声明 public String process(String value[])[] { |
Control flow statement without braces |
No high lighting,only fix |
warning |
条件或者循环语句括号没打好 |
(expression).equals("literal")rather than("literal").equals(expression) |
warning |
减少空指针的好习惯 |
|
indexOf expression is replacable with contains |
warning |
Reports any List.indexOf() expressions which can be replaced with the method List.contains(). |
|
Missorted modifiers |
warning |
修饰词顺序不符合规范 |
|
Multiple variables in one declaration |
warning |
一行代码声明了多个变量 |
|
Redundant no-arg constructor |
warning |
多余的无参构造方法 |
|
size==0 replacable with isEmpty |
warning |
很实用,判断list非空isEmpty一目了然 |
|
Unnessarily null check before equals call |
warning |
多余的空指针校验 |
|
Variables of different types in one declaration |
warning |
一行声明多个不同类型的变量,String s = "", array[]; |
Compiller issues
Title |
默认 |
建议 |
描述 |
Unchecked warning |
warning |
无 |
很多check多余,可关闭此warning |
Control flow issues
Title |
默认 |
建议 |
描述 |
Boolean expression could be replaced with conditional expression |
warning |
Boolean类型表达式优化 Reports any boolean expressions which can be expressed more compactly, and arguably more clearly, as a conditional expression. Take for example the following expression: a && b || !a && c; which may be expressed as: a ? b : c; |
|
Conditional can be pushed inside branch expression |
No high lighting,only fix |
warning |
条件表达式优化 Reports conditional expressions with then and else branches so similar that the conditional expression can be pushed inside, thereby shortening the code. For example the following conditional expression: condition ? message("value: " + 1) : message("value: " + 2) Can be pushed inside and transformed into: message("value: " + (condition ? 1 : 2)) |
default not last case in switch statement |
warning |
在switch中,default不在最后 |
|
duplicate condition in if statement |
warning |
if中出现了重复的条件 |
|
duplicate condition on && or || |
warning |
条件重复 |
|
fallthrough in switch statement |
warning |
swich中未使用break |
|
if statement could be replaced with conditional expression |
warning |
三元运算符简写if |
|
if statement with negated condition |
warning |
if的条件是否定,可以调换if else顺序 |
|
negated equality expression |
warning |
!(i == 1) |
|
pointless indexOf comparison |
warning |
indexOf>-1则无意义 |
|
redundant if statement |
warning |
无 |
多余的if For example: if (foo()) { return true; } else { return false; } can be simplified to return foo(); 有时候为了逻辑清晰,会有这样写的必要 |
switch statement without default branch |
warning |
switch缺少default |
Declaration redundancy
Title |
默认 |
建议 |
描述 |
Declaration access can be weaker |
warning |
无 |
可以定义更低的访问权限public->protected->default->private, 但长远考虑有时候会有这方面需要 |
Declaration can have final modifier |
warning |
无 |
声明可以加上final |
Empty method |
warning |
无 |
空方法 |
Method can be void |
warning |
无 |
方法可以声明成void的, 虽然返回值没用起来,但是未来很可能会被使用 |
Method returns the same value |
warning |
无 |
方法返回值总是相同,很常见 |
remove redundant lambda parameter types |
No high lighting,only fix |
warning |
优化lambda参数自动推测 Example: Map<String, Integer> map = ... map.forEach((String s, Integer i) -> log.info(s + "=" + i)); |
Error handling
Title |
默认 |
建议 |
描述 |
instanceof on catch parameter |
warning |
使用instanceof来区分异常不如使用多个catch块 |
|
Nested try statement |
warning |
嵌套try |
Java language level migration aids
Title |
默认 |
建议 |
描述 |
try finally replacable with try with resources |
warning |
无 |
Before Java 7, the usual pattern was something like this: Connection con = null; PreparedStatement prep = null; try{ con = getConnection(); prep = prep.prepareStatement("Update ..."); ... con.commit(); } catch (SQLException e){ con.rollback(); throw e; } finally{ if (prep != null) prep.close(); if (con != null) con.close(); } With Java 7 you can go for: try(Connection con = getConnection(); PreparedStatement prep = con.prepareConnection("Update ..."){ ... con.commit(); } |
lambda can be replaced with method reference |
warning |
无 |
不同风格的lambda写法 |
Numberic issues
Title |
默认 |
建议 |
描述 |
divdide by zero |
warning |
error |
除零 |
equals called on java.math.BigDecimal |
warning |
使用compareTo |
Performance
Title |
默认 |
建议 |
描述 |
Single charactor string argument in String.indexOf call |
warning |
单字符串String无需indexOf直接equals即可 |
|
String.equals("") |
warning |
直接.length==0,可能null则使用StringUtils.isEmpty |
Probable bugs
Title |
默认 |
建议 |
描述 |
Array comparison using == instead of Array.equals |
warning |
正确比较数组每个元素相等的方法Arrays.equals() |
|
Call to default toString |
warning |
未覆写ToString时使用只会打印地址 |
|
Collection added to itself |
warning |
无 |
Reports cases where the argument of a method call on a java.util.Collection or java.util.Map is the collection or map itself. This includes adding a collection to itself, which can lead to a java.lang.StackOverflowError when, for example, calling hashCode() on the self-containing collection. |
equals and hashCode are not pared |
warning |
两个对象如果不相等,hashCode不强制要求不一样,但是如果能保证不一样,对哈希的效率会比较有帮助最重要的是第二点,相等的对象必须有相同的hashCode,由于默认的hashCode方法针对每一个对象返回一个固定的随机值(有的实现是根据对象地址返回值,相当于每一个对象对应一个固定的随机值),所以当我们使用equals方法的同时,必须override(重写)hashCode方法,以满足这一点。 |
|
Object comparison using == instead of equals |
No high lighting,only fix |
warning |
比较对象相等一般不是要比较地址 |
Verbose or redundant code constructs
Title |
默认 |
建议 |
描述 |
unnecessary default for enum switch statement |
warning |
enum case就这么多无需default |