2013-03-05 3 views
0

체크 스타일은 private 클래스 변수에 대해 "final 선언이 필요합니다"라고 표시합니다. 최종 생성자에서 초기화에 오류를 줄 것이다대로 최종 그러나 선언 X 같은 X를 선언 호출 위의 경우클래스 변수에 대한 Checkstyle

class Test { 
    private int x=1; 

    public void set(int x) { 
     this.x = x; 
    } 
} 

. 그 잡은 거니?

+0

경고를 발생시키는 수표의 이름은 무엇입니까? – obourgain

+0

솔루션이 더 도움이되었을 것입니다 .... 그리고 이것은 단지 4 줄의 코드입니다 ... –

+0

@ obourgain : 필드는 최종 선언되어야합니다 –

답변

0

privatestatic 필드를 설정자를 통해 수정할 수 있도록하는 것이 좋지 않은 스타일입니다. 다음 중 하나를 수행해야합니다.

1) 필드를 xfinal으로 만들고 set 메서드를 제거하십시오.

중 하나

2

) 필드 x 비 정적 ( static 키워드를 제거)하기는, 다음은 final하도록 요구되지 않습니다. 마지막으로

0

그러나 선언 X는 정적 필드 static block를 사용 초기화하려면 생성자

에 초기화에 오류를 줄 것이다. 이 final되어야하는 이유

는 그리고 ... 그 이유는 private static하고 외부에서 액세스 할 수 없습니다

  1. 것입니다. 이 final가 될 필요하지 않은 경우
  2. 는 필요가 static

그래서하지 않습니다, 중 static을 제거 또는 코드의 다른 부분, 이제 final private static

를 사용 :

public void set(int x) { 
    this.x = x; 
} 

문제 :

  1. static 필드는 this을 사용하여 액세스하면 안됩니다.
  2. 정적 필드를 사용하여 정적 필드를 초기화합니다.
0

정적 최종 필드 값을 변경할 수 없습니다. 당신이 정말로 정적 X를해야하는 경우

는 정적 메서드에서 "이"사용할 수 없음을 명심

public static void setX(int newX){ 
    [...] 

에 방법을 변경합니다.

이렇게하면 문제가 해결됩니다.