2014-10-20 6 views
0

동료에게이 메소드에서 과제의 최종 키워드를 사용하는 이유는 무엇이며 그 이유는 "왜 안 되나요?"입니다. 여기에 결승 진출의 이점은 없습니다. 또는 종종 클래스 정의에서 볼 수 있습니다.최종 키워드가 메소드 내부에 많이 사용되는 이유는 무엇입니까?

protected void sendIndexWorkflowRequest(Status status) 
{ 

    final long contextId = status.getAppContextId(); 
    PrepareIndexPostData preparePostData = new PrepareIndexPostData.Builder(contextId).build(); 

    searchIndexService.activateAggsIndex(preparePostData); 
} 
+0

변수가 변경되지 않는다는 것이 더 분명합니다. 이 (경우) 의견의 문제이며, 언어에 의해 요구되지 않습니다. –

+0

예외적 인 경우를 제외하고 로컬 변수에 'final'을 사용하여 변경되지 않는다는 것을 분명히해야하는 경우 메서드가 너무 길어질 가능성이 높습니다. – assylias

+0

안전하다고 생각합니다. 참조가 실수로 다시 할당 될 수있는 지저분한 방법 그렇지 않으면, 꽤 무의미합니다. – Mena

답변

6

그는 그 변수 메소드 내에서을 변경해서는 안된다는 주장입니다. 기본적으로 코딩 안전 검사입니다. 즉, 변수가 실수로 (대부분 실수로) 할당되고 종종 우수 사례로 간주되는 경우 컴파일러에서 오류가 발생합니다.

메소드 매개 변수와 비슷한 것을 볼 수 있습니다.

public void method(final Object a) { 
    // ... 
} 

이는 Object 'a' 참조가 변경되지 않아야 함을 나타냅니다. 어떤 경우 (final 제거)에 변경하고 final으로 남겨 둘 수 있지만 변경할 필요가없는 동안에는 코딩 오류를 방지 할 수 있습니다. 당신이 그나마 있도록 referencing such variables within an inner class라면 final 변수가 요구됩니다

주 (지금로서가 아닌 최종 변수를 확인할 수 있습니다 자바 8 요구하지는효과적으로 최종)

+0

하지만 나중에 누가 최종인지 아닌지는 최종 결정입니다. 그래서, 나는 한 번만 사용 된 변수를 final로 정의하는 것을 보지 못합니다. – luanjot

+0

나중에 언제든지 리팩터링하고 변경할 수 있습니다. 그러나 그것은 경솔한 결정입니다. 그것이 아니라면 마지막은 당신을 (잘하면) 보호 할 것입니다 –

+0

@MarkoTopolnik - thx –

0

그것은 가장 좋은 방법입니다 지역 변수를 재사용하는 것을 끝내고 미래에 그러한 방법을 리팩토링하는 데 도움이 될 것입니다.