Unnecessary
Unnecessary 룰셋에는 불필요한 코드에 대한 규칙이 포함되어있습니다.
1. UnnecessaryConversionTemporary
프리미티브를 문자열로 변환시 불필요한 임시 객체를 피하시기 바랍니다.
1 .우선순위: Medium
2 .심각도: 경고
3 .예시
public String convert(int x) {
String foo = new Integer(x).toString(); // 오브젝트 낭비
return Integer.toString(x); // 권장
}
2. UnnecessaryReturn
불필요한 리턴문은 사용하지 않습니다.
1 .우선순위: Medium
2 .심각도: 경고
3 .예시
public class Foo {
public void bar() {
int x = 42;
return;
}
}
3. UnnecessaryFinalModifier
클래스가 final 제어자(modifier)로 선언되었을 때엔 모든 메소드들 또한 자동적으로 final로 선언되므로 명시적으로 final이라고 선언할 필요가 없습니다.
1 .우선순위: Medium
2 .심각도: 경고
3 .예시
public final class Foo {
// 클래스가 final 인 경우 method에 final 선언 불필요
private final void foo() {
}
}
4. UselessOverridingMethod
오버라이딩된 메소드가 super를 호출, 즉 superclass에 정의된 똑같은 메소드를 호출합니다.
1 .우선순위: Medium
2 .심각도: 경고
3 .예시
public void foo(String bar) {
super.foo(bar); // overriding 불필요
}
public String foo() {
return super.foo(); // overriding 불필요
}
@Id
public Long getId() {
return super.getId(); // ignoreAnnotations이 false라면, 기본으로 동작해야 하는 로직이 무엇인가?
}
5. UnusedNullCheckInEquals
객체가 null인지 체크한 후엔, null인지 여부가 불확실한 객체의 equals() 메서드를 호출하기 보다는 확실한 객체의 equals() 메서드를 호출해야 합니다.
1 .우선순위: Medium
2 .심각도: 경고
3 .예시
public class Test {
public String method1() { return "ok";}
public String method2() { return null;}
public void method(String a) {
String b;
// method1()의 결과 값이 null인지 불확실 하고
// a가 not null 이란것을 아는 경우
// a.equals(method1())이 더 나은 방식
if (a!=null && method1().equals(a)) { // 규칙 실행
// 로직
}
if (method1().equals(a) && a != null) { // 규칙 실행 안함
// 로직
}
if (a!=null && method1().equals(b)) { // 규칙 실행 안함
// 로직
}
if (a!=null && "LITERAL".equals(a)) { // 규칙 실행 안함
// 로직
}
if (a!=null && !a.equals("go")) { // 규칙 실행 안함
a=method2();
if (method1().equals(a)) {
// 로직
}
}
}
}