Mit anonymen inneren Klassen behandelt Java Felder, die außerhalb des anonymen inneren Klassenblocks deklariert sind.Anonyme innere Klasse und Felder außerhalb dieses Codeblocks
Im Fall policyOwnerModelObject, wie ist dieses Feld in der generierten anonymen inneren Klasse definiert?
// 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;
}
}
};
====
OK, dekompilierten die Klasse und das ist, was ich habe:
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);
}
}
Ich verstehe diese Zeile nicht: 'this $ 0 = final_policytrustpanel;' Woher kommt 'final_policytrustpanel'? – jjnguy
Denken Sie an das äußere "dieses" als ein "endgültiges" Local der umschließenden Methode (auch wenn die innere Klasse nicht anonym ist). –
Ich dekompilierte die ABC $ 1.class-Datei. Der Decompiler hat die final_policy-Vertrauensstellung nicht übernommen. Ich weiß nicht, was das ist. Aber ich habe meine Antwort bekommen. –