1.不要用.size(),改用isEmpty()
Using Collection.size()
to test for emptiness works, but using Collection.isEmpty()
makes the code more readable and can be more performant. The time complexity of any isEmpty()
method implementation should be O(1)
whereas some implementations of size()
can be O(n)
.
Noncompliant Code Example
if (myCollection.size() == 0) { // Noncompliant /* ... */ }
Compliant Solution
if (myCollection.isEmpty()) { /* ... */ }
2.当catch异常的时候,要么打Log,要么Throw出去,不要什么都不做
When handling a caught exception, the original exception's message and stack trace should be logged or passed forward.
Noncompliant Code Example
// Noncompliant - exception is lost try { /* ... */ } catch (Exception e) { LOGGER.info("context"); } // Noncompliant - exception is lost (only message is preserved) try { /* ... */ } catch (Exception e) { LOGGER.info(e.getMessage()); } // Noncompliant - exception is lost try { /* ... */ } catch (Exception e) { throw new RuntimeException("context"); }Compliant Solution
try { /* ... */ } catch (Exception e) { LOGGER.info(e); } try { /* ... */ } catch (Exception e) { throw new RuntimeException(e); } try { /* ... */ } catch (RuntimeException e) { doSomething(); throw e; } catch (Exception e) { // Conversion into unchecked exception is also allowed throw new RuntimeException(e); }Exceptions
InterruptedException
,NumberFormatException
,ParseException
andMalformedURLException
exceptions are arguably used to indicate nonexceptional outcomes. Similarly, dealing withNoSuchMethodException
is often required when dealing with the Java reflection API.Because they are part of Java, developers have no choice but to deal with them. This rule does not verify that those particular exceptions are correctly handled.
int myInteger; try { myInteger = Integer.parseInt(myString); } catch (NumberFormatException e) { // It is perfectly acceptable to not handle "e" here myInteger = 0; }See
- CERT, ERR00-J. - Do not suppress or ignore checked exceptions
3.已经定义的字符串,不要再使用toString()方法
Invoking a method designed to return a string representation of an object which is already a string is a waste of keystrokes. This redundant construction may be optimized by the compiler, but will be confusing in the meantime.
Noncompliant Code Example
String message = "hello world"; System.out.println(message.toString()); // Noncompliant;