незнакомый синтаксис Java '(новый MyClass.1 ())' - PullRequest
0 голосов
/ 06 октября 2018

Некоторый код, который я поддерживаю, использует незнакомый синтаксис.Я не смог найти примеры этого синтаксиса в документах 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.Что делает (это)?Это сокращение для (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();
        }
    }
);

1 Ответ

0 голосов
/ 06 октября 2018

Это просто неверный синтаксис Java.Вы можете убедиться в этом сами, прочитав JLS .

  • . В этой позиции требуется <identifier>.
  • <identifier> не может начинаться сцифра.

Таким образом, в основном то, что вы пытаетесь сохранить, не является допустимым исходным кодом Java.

Я предполагаю, что это вывод декомпилятора, и декомпилятор обнаружил несколько байт-кодов, которые он не знает, как декомпилировать в Java.Если вы "поддерживаете" декомпилированный код .... удачи вам!Вам нужно будет выяснить, что код означает из контекста и / или путем обратного инжиниринга байт-кодов сложным способом.

...