【问题标题】:Anonymous inner class and fields outside of that block of code该代码块之外的匿名内部类和字段
【发布时间】:2010-12-13 16:51:23
【问题描述】:

对于匿名内部类,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从哪里来?
  • 将外部 this 视为封闭方法的局部 final(即使内部类不是匿名的)。
  • 我反编译了 ABC$1.class 文件。反编译器没有获得 final_policy 信任。我不知道那是什么。但是,我得到了答案。

标签: java inner-classes


【解决方案1】:

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

通常(无论是否匿名)内部类都可以完全访问其父类的成员变量。

【讨论】:

  • 见上文,我反编译了匿名内部类。很有趣。
猜你喜欢
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
相关资源
最近更新 更多