匿名内部类和该代码块之外的字段

时间:2010-12-13 16:51:24

标签: java inner-classes

使用匿名内部类,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);
    }
}

1 个答案:

答案 0 :(得分:1)

这里private Bean policyOwnerModelObject只是该班的常规成员。在这种情况下,变量不一定是最终的,因为在匿名类之前它永远不会超出范围。内部类将具有对该变量的完全访问权限,就好像它是该内部类的成员一样。

一般情况下(匿名或非匿名)内部类可以完全访问其父类的成员变量。