使用匿名内部类,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);
}
}
答案 0 :(得分:1)
这里private Bean policyOwnerModelObject
只是该班的常规成员。在这种情况下,变量不一定是最终的,因为在匿名类之前它永远不会超出范围。内部类将具有对该变量的完全访问权限,就好像它是该内部类的成员一样。
一般情况下(匿名或非匿名)内部类可以完全访问其父类的成员变量。