익명 내부 클래스를 사용하면 Java가 익명 내부 클래스 블록 외부에서 선언 된 필드를 어떻게 처리합니다.익명 내부 클래스 및 해당 코드 블록 외부의 필드
policyOwnerModelObject의 경우 생성 된 익명의 내부 클래스에서 해당 필드를 어떻게 정의합니까?
// Local variable
final Bean policyOwnerModelObject = XXXXX <--- here, how is the class built with access to this object. Is it a final field in the class?
final WebMarkupContainer container = new WebMarkupContainer("container") {
@Override
public boolean isVisible() {
if ((policyOwnerModelObject.getPolicyOwner() != null) && (policyOwnerModelObject.getPolicyOwner().getValue() != null)) {
return !PolicyOwnerService.TRUST.equals(policyOwnerModelObject.getPolicyOwner().getValue());
} else {
return false;
}
}
};
====
확인, 클래스를 디 컴파일 그리고 이것은 내가 가진 것입니다 : 여기
class MyDataPanel$1 extends WebMarkupContainer
{
public boolean isVisible()
{
if(val$policyOwnerModelObject.getMy() != null && val$policyOwnerModelObject.getMy().getValue() != null)
return !"4".equals(val$policyOwnerModelObject.getMy().getValue());
else
return false;
}
final MyDataPanel this$0;
private final MyBean val$policyOwnerModelObject;
MyDataPanel$1(MyBean policyownerbean)
{
this$0 = final_policytrustpanel;
val$policyOwnerModelObject = policyownerbean;
super(String.this);
}
}
나는이 줄을 이해하지 못한다 :'this $ 0 = final_policytrustpanel;'final_policytrustpanel은 어디에서 왔는가? – jjnguy
바깥 쪽 'this'는 (내부 클래스가 익명이 아닌 경우에도) 둘러싼 메소드의 'final'로컬이라고 생각하십시오. –
ABC $ 1.class 파일을 디 컴파일했습니다. 디 컴파일러는 final_policy 트러스트를 선택하지 않았습니다. 나는 그것이 무엇인지 모른다. 그러나 나는 나의 대답을 얻었다. –