不熟悉的 Java 语法 '(new MyClass.1())'

unfamiliar Java syntax '(new MyClass.1())'

我维护的一些代码使用了不熟悉的语法。我无法在 Java 文档中找到此语法的示例。

public static void main(String[] args){ ... javax.swing.SwingUtilities.invokeLater(new MyClass.1()); ... }

public MyClass(a,m){ ... javax.swing.myJButton.addActionListener(new MyClass.5(this)); ... }

Q1。 “.1”和“.5”的含义和作用是什么?

Q2。 “(这个)”是做什么的?是 shorthand for (this.param1, this.param2,...)?

Q3。这种语法是专门用于匿名对象实例化、javax.swing 组件、Runnables、多线程等,还是一般用途?

Q4。此代码的另一个版本使用更熟悉的语法。这些语句在语法上是否等同于上述语句(尽管构造函数调用和事件行为不同)?

javax.swing.SwingUtilities.invokeLater(
    new Runnable(){
        public void run(){
            new MyClass(a,m);
        }
    }
);

javax.swing.myJButton.addActionListener(
    new ActionListener(){
        public void actionPerformed(ActionEvent e){
            myJTextField.grabFocus();
        }
    }
);

那是完全无效的 Java 语法。您可以通过阅读 JLS.

自行确认这一点
  • 在那个位置,需要 <identifier>
  • <identifier> 不能以数字开头。

所以,基本上,您要维护的内容是无效的 Java 源代码。

我猜这是反编译器的输出,反编译器遇到了一些它不知道如何反编译为 Java 的字节码。如果你是"maintaining"反编译代码....祝你好运!您将需要从上下文和/或通过硬方式对字节码进行逆向工程来弄清楚代码 的含义 是什么。