Проблема интерпретации результирующего кода декомпилированного Java-класса: MyType.access $ 102 - PullRequest
2 голосов
/ 16 мая 2009

Я пытаюсь немного расширить недокументированный класс в сторонней среде, которую мы используем. Я декомпилировал файл .class с помощью jd-gui и вижу внутренний класс, определенный следующим образом:

private class DeactivateAction extends AbstractAction {
    public DeactivateAction() {
        super("Deactivate");
    }

    public void actionPerformed(ActionEvent paramActionEvent) {
        if (MyContainingType.this.someBoolean) {
            MyContainingType.access$102(MyContainingType.this, false);
            MyContainingType.this.add(MyContainingType.this.interceptor);
        }
    }
}

Я не уверен, как интерпретировать здесь строку "access $ 102". MyConistingType расширяет javax.swing.JLayeredPane. Это не компилируется для меня, так как я могу интерпретировать это и преобразовать это правильно в моем расширенном классе?

Ответы [ 2 ]

5 голосов
/ 16 мая 2009

Это синтетический аксессор.

Даже внутренние классы на самом деле не имеют доступа к закрытым членам своего включающего класса. Компилятор "синтезирует" методы доступа по умолчанию (пакет), чтобы позволить внутренним классам работать с закрытыми полями включающего класса.

Вы должны иметь возможность взглянуть на включающий класс, чтобы понять, что делает access$102.

Инструмент javap с опцией -c также может быть очень полезен.

0 голосов
/ 16 мая 2009

AFAIK jd-gui все еще совершенствуется во внутренних классах. До версии 0.2.9 я вообще не мог декомпилировать внутренние классы. Теперь это работает намного лучше, и я действительно с нетерпением жду следующих релизов!

'access $ 102' для меня выглядит как заполнитель статического метода. Вы должны быть в состоянии найти что-то в MyConistingType с похожей подписью.

...