최종의 과도한 사용이 좋은 것보다 더 상처를 입을 수 있습니까?

StackOverflow https://stackoverflow.com/questions/2234630

  •  19-09-2019
  •  | 
  •  

문제

사람들이 클래스 "최종"내의 모든 변수를 만드는 데 강조하는 이유는 무엇입니까? 나는 개인 로컬 변수에 최종을 추가하거나 상수 및 전달 변수를 익명의 내부 클래스로 전달하는 데 실제로 최종적으로 사용하는 데 진정한 이점이 있다고 생각하지 않습니다.

나는 어떤 종류의 불꽃 전쟁도 시작하려고하지 않습니다. 나는 이것이 왜 이것이 어떤 사람들에게 왜 그렇게 중요한지 알고 싶어합니다. 내가 뭔가를 놓치고 있습니까?

도움이 되었습니까?

해결책

  1. 의지. 코드를 수정하는 다른 사람들은 변경되지 않아야 할 값을 변경하지 않습니다.

  2. 컴파일러 최적화가 필드의 값이 절대 변하지 않는다는 것을 알면 컴파일러 최적화를 수행 할 수 있습니다.

또한 클래스의 모든 변수가 최종적 인 경우 (게시물에서 참조하는대로), 스레드 안전성을 달성하는 훌륭한 방법 인 불변의 클래스가 있습니다 (변한 속성에 참조를 드러내지 않는 한). .

다른 팁

단점입니다

annoy it is hard
annoy to read
annoy code or anything
annoy else when it all 
annoy starts in the 
annoy same way

상수를 생성하고 서브 클래스/재정의 방지에 대한 명백한 사용법 외에도 대부분의 경우 개인 선호도입니다. 많은 사람들이 "프로그래머 의도를 보여주는"의 이점이 실제 코드 가독성보다 더 중요하다고 생각하기 때문입니다. 많은 사람들은 조금 덜 말을 선호합니다.

최적화에 관해서는, 그것은 그것을 사용하는 가난한 이유입니다 (많은 경우에 의미가 없습니다). 그것은 최악의 미세 최적화 형태이며 JIT 시대에는 목적이 없습니다.

나는 당신이 선호한다면 그것을 사용하는 것이 좋습니다. 당신이 선호하는 것이라면 그렇지 않습니다. 많은 경우에 모든 것이 종교적 논쟁으로 이어질 것이기 때문에 걱정하지 마십시오.

그것은 그 가치가 변경 될 것으로 기대하지 않는다는 것을 알 수 있으며, 이는 무료 문서입니다. 연습은 그것이 있기 때문입니다 분명히 해당 변수의 의도를 전달하고 컴파일러가이를 확인하도록 강요합니다. 그 외에도 컴파일러가 최적화를 할 수 있습니다.

중요합니다 불변성 특히 공유 메모리 모델을 처리 할 때 특히 중요합니다. 무언가가 불변이라면 스레드가 안전하므로 모범 사례로 따라갈 수있는 논쟁이 충분합니다.

http://www.artima.com/intv/blochp.html

아직 언급되지 않은 동시 프로그래밍의 한 가지 이점 :

생성자의 실행이 완료되면 최종 필드가 초기화됩니다.

현재 작업중 인 프로젝트는 Eclipse에서 "저장"을 누를 때마다 final 코드에서 변경되지 않은 모든 변수 또는 필드에 수정자가 추가됩니다. 그리고 그것은 아직 아무도 아프지 않았습니다.

다른 곳에서 언급했듯이 Final을 사용해야 할 많은 이유가 있습니다. IMO의 가치가없는 곳은 메소드의 매개 변수에 있습니다. 엄격하게 말하면, 키워드는 여기에 값을 더하지만, 값은 못생긴 구문을 견딜 수있을 정도로 높지 않습니다. 나는 단위 테스트를 통해 이런 종류의 정보를 표현하는 것을 선호합니다.

클래스가 상속되지 않는 한 클래스의 내면의 값에 대한 최종 가치를 사용하는 것은 과잉이라고 생각합니다. 유일한 장점은 컴파일러 최적화와 관련하여 반드시 이익을 얻을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top