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 中使用。
- What is the difference between Class.this and this in Java
事实上,如果我尝试在一个简单的示例中重现这一点,其中派生 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.
之外是非法的
在阅读 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 中使用。
- What is the difference between Class.this and this in Java
事实上,如果我尝试在一个简单的示例中重现这一点,其中派生 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.