When reading the description for javax.servlet.jsp.tagext I came across a strange usage of the syntax ClassName.this.methodName()
in the section Generated Simple Tag Handler (MySimpleTag.java), specifically in the MySimpleTag.doTag()
method.
public class MySimpleTag
extends javax.servlet.jsp.tagext.SimpleTagSupport
[...]
{
protected JspContext jspContext;
public void setJspContext( JspContext ctx ) {
super.setJspContext( ctx );
// Step T.2 - A JspContext wrapper is created.
// (Implementation of wrapper not shown).
this.jspContext = new utils.JspContextWrapper( ctx );
}
public JspContext getJspContext() {
// Step T.2 - Calling getJspContext() must return the
// wrapped JspContext.
return this.jspContext;
}
public void doTag() throws JspException {
java.lang.Object jspValue;
JspContext jspContext = getJspContext();
JspContext _jsp_parentContext =
SimpleTagSupport.this.getJspContext();
[...]
}
[...]
}
I thought ClassName.this
was only to be used within non-static inner classes that need access to the containing class instance.
And indeed, if I try to reproduce this in a simple example where a derived class calls a base class method with BaseClass.this.someMethod()
, I get a compiler error:
error: not an enclosing class: BaseClass
return Base.this.someMethod();
^
So does that mean the code for MySimpleTag.doTag()
in the API documentation has a syntax error? Was the line actually supposed to be this?
JspContext _jsp_parentContext =
super.getJspContext();