ClassName.this 语法但不适用于内部类

ClassName.this syntax but not for inner classes

在阅读 javax.servlet.jsp.tagext 的 description 时,我在 生成的简单标记处理程序(MySimpleTag.java),具体在MySimpleTag.doTag()方法中。

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();
        [...]
    }
    [...]
}

我认为 ClassName.this 只能在需要访问包含 class 实例的非静态内部 classes 中使用。

事实上,如果我尝试在一个简单的示例中重现这一点,其中派生 class 使用 BaseClass.this.someMethod() 调用基本 class 方法,我会收到编译器错误:

error: not an enclosing class: BaseClass
    return Base.this.someMethod();
               ^

那么这是否意味着 API 文档中 MySimpleTag.doTag() 的代码存在语法错误?该行实际上应该是这样吗?

JspContext _jsp_parentContext = 
            super.getJspContext();

正如@EJP 指出的那样,这可能是一个文档错误。编译时错误清楚地表明 ClassName.this 语法在非静态内部 class.

之外是非法的