5
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);
        }
    });
}

コンパイルして理解しようとしているコードをいくつか入手しました。高く評価されるのを助ける

4

3 に答える 3

4

ここここで説明されているように、コンストラクターへの引数とRunnableフィールド名への「this.val $」はコンパイラーによって追加され、生成されたバイトコードに表示されます。したがって、これらの余分なものは逆コンパイルされたコードに反映されます。

final元の逆コンパイルされたコードを取得するには、の宣言に追加し、 :の前のtoとfromの呼び出しからtitle削除します。titleRunnablethis.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);
        }
    });
}
于 2012-11-27T18:21:20.893 に答える
3

この行:

myFrame.setTitle(this.val$title);

JFrame属性の値を使用して、オブジェクトのタイトルを設定するだけですval$titleval$titleは現在のクラスのインスタンス属性であり、その名前は(のために)少し変わっています$が、それでもJavaの識別子には有効です。

于 2012-04-05T18:21:46.847 に答える
2

5行目は、フレームのタイトル(ウィンドウのウィンドウフレームの上部に表示されるテキスト)を設定しているだけです。「this.val $ title」は、コードを書いた人がタイトル文字列を保存したval$titleという名前のローカルメンバーです。の。

Cに基づくほとんどの言語が$をazやAZのようなアルファベット文字として扱うのを見るのは少し珍しいですが。

于 2012-04-05T18:21:17.710 に答える