我到处搜索,试图弄清楚val$editorkit或下面的$符号是什么意思,但没有luck...please帮助...
private synchronized void updateHtmlEditor(HTMLEditorKit editorkit, StringReader reader)
{
Runnable runnable = new Runnable(editorkit, reader)
{
public void run() {
try {
this.val$editorkit.read(this.val$reader, LinkParser.this.htmlViewEditor.getDocument(), LinkParser.this.htmlViewEditor.getDocument().getLength());
} catch (IOException ex) {
Logger.getLogger(LinkParser.class.getName()).log(Level.SEVERE, null, ex);
} catch (BadLocationException ex) {
Logger.getLogger(LinkParser.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
SwingUtilities.invokeLater(runnable);
}发布于 2012-02-05 05:45:29
$符号由Java编译器用于生成的内部类、合成字段和方法的名称。它对Java源代码中的标识符有效,但不鼓励使用。
您显示的代码看起来像是匿名内部类的反编译代码。方法updateHtmlEditor中的匿名Runnable实现访问其周围方法的参数。为了使这种访问成为可能,需要将参数声明为final。在Java代码中,匿名类有三个最终的实例属性:包含外部实例LinkParser.this的this$0、包含外部方法参数的val$editorkit和包含外部方法参数的val$reader,以及一个具有三个参数的构造函数,该构造函数将其参数分配给属性。
还要注意,LinkParser.this.htmlViewEditor是对外部类LinkParser的属性的引用。在此示例中,可以省略对外部实例LinkParser.this的显式引用。
原始源代码如下所示:
private synchronized void updateHtmlEditor(final HTMLEditorKit editorkit, final StringReader reader)
{
Runnable runnable = new Runnable()
{
public void run() {
try {
editorkit.read(reader, htmlViewEditor.getDocument(), htmlViewEditor.getDocument().getLength());
} catch (IOException ex) {
Logger.getLogger(LinkParser.class.getName()).log(Level.SEVERE, null, ex);
} catch (BadLocationException ex) {
Logger.getLogger(LinkParser.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
SwingUtilities.invokeLater(runnable);
}发布于 2012-02-05 00:32:37
它并没有什么特别的意思--它只是一个字母,构成了名称的一部分,就像它前面的l或者后面的e一样。
有关名称中允许和不允许的内容的完整详细信息,请参阅Identifiers上的JLS部分。
发布于 2012-02-05 00:35:05
我们真的不能说我猜,因为你没有提供变量声明,但在Java语言中,$可以是变量名的一部分,例如,你可以这样做:
String str$rr = "Hello";
System.out.println(str$rr);类似这样的东西将打印Hello。
https://stackoverflow.com/questions/9142397
复制相似问题