什么是Java中的“val $ title”(美元符号表达式)?

时间:2012-04-05 18:18:59

标签: java swing

private void launchEventPanel(String title) {
    EventQueue.invokeLater(new Runnable(title) {
        public void run() {
            JFrame myFrame = new JFrame();
            myFrame.setTitle(this.val$title);
            myFrame.setIconImage(CrConference.this.mainCore.myPanel.myIconManager.getPromptIcon(Mart.class.toString()));
            myFrame.getContentPane().add(Conference.this.myEventPanel, "Center");
            myFrame.pack();
            myFrame.setVisible(true);
        }
    });
}

我得到了一些我想编译和理解的代码。帮助高度赞赏

3 个答案:

答案 0 :(得分:4)

herehere所述,编译器添加Runnable构造函数和字段名称“this.val $”的参数,并显示在生成的字节码中。因此,这些额外的东西会反映在反编译的代码中。

要获取原始反编译代码,请将final添加到title的声明中,然后从titleRunnable的调用中删除this.val$ title的前面:

private void launchEventPanel(final String title) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            JFrame myFrame = new JFrame();
            myFrame.setTitle(title);
            myFrame.setIconImage(CrConference.this.mainCore.myPanel.myIconManager.getPromptIcon(Mart.class.toString()));
            myFrame.getContentPane().add(Conference.this.myEventPanel, "Center");
            myFrame.pack();
            myFrame.setVisible(true);
        }
    });
}

答案 1 :(得分:3)

这一行:

myFrame.setTitle(this.val$title);

只需使用属性JFrame的值设置val$title对象的标题即可。 val$title是当前类的实例属性,其名称有点不寻常(因为$),但对Java中的标识符有效。

答案 2 :(得分:2)

第5行只是设置框架的标题(你在窗口框架顶部看到的文字)“this.val $ title”只是一个名为val $ title的本地文件,无论谁编写存储的代码。中的标题字符串。

虽然看到大多数基于C语言将$视为字母字符(如a-z或A-Z)有点不常见。