는, 누군가가 최종 초기화가 연기 될 수 있음을 언급하고 예를 제공합니다java에서 최종 초기화를 연기 할 수 있습니다. 실수로 null을 반환하지 않도록하려면 어떻게해야합니까? 은 "숨겨진 기능 자바의"질문에
public Object getElementAt(int index) {
final Object element;
if (index == 0) {
element = "Result 1";
} else if (index == 1) {
element = "Result 22";
} else {
element = "Result 3";
}
return element;
}
포스터는 말한다을 :
그것은 사건을 그리워 너무 쉽게하고 우연히 null을 반환합니다. null을 돌려주는 것을 불가능하게하지는 않습니다 만, 목적 상으로는 명백합니다.
그러나 나는이 말의 의미를 머리 속에 감쌀 수 없습니다. 요소가 최종 선언되지 않은 경우 어떻게 다른가? else 문이 항상 null이 반환되지 않도록 보장하지 않겠습니까? 나는 이것이 실제로 코드가 작동하는 방식에 영향을 미치기보다는 외관상의 것이라고 생각합니다.
두 번째 예제를 사용하면 컴파일러에서 "최종 가변 요소에 값을 할당 할 수 없습니다."를 반환합니다. My IDE는 field 요소를 final이 아닌 것으로 만들 것을 권장합니다. – danieljimenez
두 번째 예를 명확히했습니다. 요점은 최종 필드가 메서드가 아니라 클래스의 생성자에서 설정된다는 것입니다. 이니셜 라이저도 작동합니다. – Yishai
좋습니다. 또한 제 질문은 분명하지 않다고 생각합니다. 사과드립니다. OP는 이것이 null 값으로부터 보호하는 방법을 언급했습니다. 그러나 당신은 이것을 분명히했습니다. 그들의 예를 말할 수있는 것에서부터 그들이 설명하는 것의 예가 아닙니다. – danieljimenez