Подтвердить что ты не робот

Что это означает, когда у вас есть переменная типа доступа $002 в Java?

У меня есть java jar, который я декомпилировал с разрешения оригинального разработчика, который мы должны использовать, пока не получим копию исходного кода. Я столкнулся с классом, который выглядит следующим образом:

Classname.access$002(Param1, Param2);

Имя класса верное, но доступ $002 выглядит неправильно (есть несколько других подобных, за исключением того, что имена имеют доступ к $204 и другим номерам, добавленным до конца), и мне интересно, означает ли это что-либо на Java или если это связано с тем, что операция декомпиляции была неполной.

Я использую JD-GUI для декомпиляции классов.

Также стоит отметить, что нет методов с той же сигнатурой, что и метод доступа $002, по крайней мере в классе Classname.

4b9b3361

Ответ 1

Методы access$XXX - это вызовы от внутренних нестатических классов к членам класса вложенности.

public class DummyDummy {

private int x = 0;
private Inner i = new Inner();
private int foo(int a, int b) {
    return a+b+x;
}

private class Inner {
    void doIt() {
        System.out.println(
         // Here, DummyDummy.access$0(DummyDummy, int, int) is called 
         // which calls DummyDummy.foo(int, int)
             foo(1,2)                 );
    }
}

public static void main(String[] args) {
    new DummyDummy().i.doIt();
}

}