컴파일러에서 데이터 필드 f
이 초기화 될 것이므로 다음 코드는 컴파일되지 않습니다. 이걸 어떻게 고치 죠?루프 내에서 데이터 필드를 어떻게 초기화합니까?
import java.util.Scanner;
public class Foo
{
private final int f;
/*constructor*/
public Foo()
{
Scanner sc = new Scanner(System.in);
for(int i = 0; i < 10; i++)
{
if(i == 5)
f = sc.nextInt();//error: variable f might be assigned in a loop
}
}
public Foo(int i)
{
j = i;//no problem
}
}
언어의 결함의 종류가 아니기 때문에 내 다른 생성자에서 나는 final
에 f
세트를 가질 수 있으며,이 루프에서하지 그냥 때문에 작동합니다. 나는 컴파일러 (벙어리 인)가 루프를보고 f
이 재 할당 될 것이라고 생각하지만 프로그램의 논리는 한 번만 발생하는 것을 보장합니다. 이것은 Java가 프로그래머를 "보호"하는 방법의 예입니까?
궁극적으로 왜 f
이 최종 Netbeans으로 선언되었는지 궁금해 할 때, 아마도 코드가 많이 다른 경우 일 것입니다.
왜 최종 f를? 당신이 iterating하고 그것을 격일로 할당 할 때? – Hrishikesh
"마지막"을 버리시겠습니까? – Fildor
이유는 f가 최종이기 때문입니다. – Hrishikesh