또한 Java가 익명 내부 클래스를 만드는 방법을 이해하는 데 도움이됩니다. 자바가 특정 클래스를 어떻게 구현하는지.
Java는 컴파일러가 컴파일 타임에 해당 객체의 유형을 알아야하기 때문에 해당 변수가 최종적이어야합니다. 그러면 컴파일러는 익명 내부 클래스 구현 (이 경우 'et') 내에 필드를 생성합니다.
형식이 final이 아닌 경우 컴파일러에서 내부 클래스 구현을 작성하는 방법을 결정합니다. 기본적으로 필드를 final로 선언하면 Java 컴파일러에 자세한 정보가 제공됩니다. 컴파일러 도움이되지 않습니다
코드, 익명의 내부 클래스 컴파일되지 않습니다 : 코드 위로
Object et;
et = a ? new Object() : new EditText();
...
을, 자바 컴파일러는 정말를 만들 수 없습니다 익명 내부 클래스.
귀하의 코드 :
최종 글고 치기 등등 = (글고) findViewById를 (R.id.t);
...
new Button.OnClickListener$1(){
public void onClick(View v)<br>
{
Intent on=new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+et.getText()));
startActivity(on);
}
});
... 바이트 코드 클래스, 당신이이 같을 수 있습니다 제공하는 내부 클래스 블록의 구현을 작성합니다 자바 컴파일러.
public class OnClickListener$1 {
private final EditText et ; <---- this is important
public OnClickListener$1(final et) {
this.et = et;
}
public void onClick(View v)<br>
{
Intent on=new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+et.getText()));
startActivity(on);
}
}
당신은 내가 익명의 바이트 코드 클래스를 $ 1 찾아 그 바이트 코드 파일 디 컴파일 제공하는 의사 코드를 테스트 할 수 있습니다.당신의 로그 캣에 어떤 오류가 발생했습니다었던 당신이 우리를 알 수 있습니다 : 드로이드
Java final variable: If you make any variable as final, you cannot change the value of final variable (It will be constant).
Java final method: If you make any method as final, you cannot override it.
Java final class: If you make any class as final, you cannot extend it.
변수 클래스, 메소드 –
그것의 실행 시간이 아닌 컴파일 시간 error.it "다른 방법으로 정의 된 내부 클래스 내부에서 최종 변수가 아닌 것을 참조 할 수 없습니다."이것은 내가 가진 것입니다 ... –