在阅读javax.servlet.jsp.tagext的description时,我在生成的简单标记处理程序(MySimpleTag.java)一节中遇到了语法ClassName.this.methodName()
的一种奇怪用法,特别是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
只能在需要访问包含类实例的非静态内部类中使用。
事实上,如果我尝试在一个简单的示例中重现这一点,其中派生类使用BaseClass.this.someMethod()
调用基类方法,则会出现编译器错误:
error: not an enclosing class: BaseClass
return Base.this.someMethod();
^
这是否意味着API文档中的MySimpleTag.doTag()
代码有语法错误?这条线实际上应该是这个吗?
JspContext _jsp_parentContext =
super.getJspContext();
答案 0 :(得分:0)
正如@EJP指出的那样,它可能是一个文档错误。编译时错误很清楚ClassName.this
语法在非静态内部类之外是非法的。