Хорошо, это результат декомпилированного кода, есть ли способ связать числа
(access$16
, access$17
и т. Д.) К исходной переменной или классу? Из того, что я вижу,
единственный способ - сделать это вручную (т.е. посмотреть, на что ссылаются, где и
угадайте, что, поскольку класс 'this' получил URL, тогда 'this' должен быть связан с переменной 'that')?
Методы access$x
создаются, если вы обращаетесь к закрытым методам или переменным из вложенного класса (или наоборот, или из одного вложенного класса в другой). Они создаются компилятором, поскольку виртуальная машина не разрешает прямой доступ к закрытым переменным.
Если декомпилятор позволяет этим вызовам методов оставаться в воссозданном исходном коде для класса using, он также должен позволять определениям синтетических методов оставаться в воссозданном исходном коде для используемого класса. Если это так, взгляните на класс, который является получателем рассматриваемого метода (class1
в вашем случае), такой метод должен быть (access$17
). В коде этого метода вы можете увидеть, какой реальный метод (или переменная) доступен здесь.
Если декомпилятор удалил синтетические методы, это либо ошибка, либо ее можно настроить. Может также случиться так, что вам придется передать все классы одновременно, и тогда он сможет везде добавлять правильные методы / поля - посмотрите его документацию.
Если у вас есть классы перед точкой вызова метода (и их суперклассы, если они есть), у вас должны быть методы.
Из отправленного вами фрагмента должен быть метод access$16
и access$17
в class1
(или здесь class1
локальная переменная?).
Если это не так, возможно, ваш декомпилятор попытался быть умнее, чем он должен. Вы можете взглянуть на вывод javap class1
, чтобы увидеть, есть ли методы, и javap -c class1
для всего байт-кода. Или используйте другой декомпилятор.