powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java. Ошибки после декомпиляции.
9 сообщений из 9, страница 1 из 1
Java. Ошибки после декомпиляции.
    #37873962
drewha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
После декомпиляции появились строки вида
Код: java
1.
int i = this.val$docProcessor.process()


В классе объекта this нет полей с названием, похожим на val$docProcessor. Наследников и родителей у класса нет. Что это может быть?
...
Рейтинг: 0 / 0
Java. Ошибки после декомпиляции.
    #37873994
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно синтетические поля для реализации ссылок из анонимных классов.
...
Рейтинг: 0 / 0
Java. Ошибки после декомпиляции.
    #37874040
drewha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczвозможно синтетические поля для реализации ссылок из анонимных классов.

Похоже. А вот это:
Код: java
1.
SomeController.access$102(SomeController.this, false)

?
...
Рейтинг: 0 / 0
Java. Ошибки после декомпиляции.
    #37874056
RomikT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
drewha,

А это синтетические методы-аксессоры позволяющие внутренним класам видеть приватные поля внешнего.
...
Рейтинг: 0 / 0
Java. Ошибки после декомпиляции.
    #37874067
drewha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RomikTdrewha,

А это синтетические методы-аксессоры позволяющие внутренним класам видеть приватные поля внешнего.

Их можно как-нибудь записать в стандартной форме, чтобы скомпилировать?
...
Рейтинг: 0 / 0
Java. Ошибки после декомпиляции.
    #37874096
RomikT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
drewhaИх можно как-нибудь записать в стандартной форме, чтобы скомпилировать?
Конкретно
Код: java
1.
SomeController.access$102(SomeController.this, false)

вероятно соответствует
Код: java
1.
SomeController.this.someBooleanField = false;

Вообще, содержимое методов типа access$102 тоже должно быть декомпилировано, поэтому можно просто посмотреть на код, который они выполняют.
...
Рейтинг: 0 / 0
Java. Ошибки после декомпиляции.
    #37874247
drewha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще, содержимое методов типа access$102 тоже должно быть декомпилировано, поэтому можно просто посмотреть на код, который они выполняют.

Методы так и должны называться - access$102? Нет похожих.
Что означают цифры?
...
Рейтинг: 0 / 0
Java. Ошибки после декомпиляции.
    #37874408
RomikT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
drewhaМетоды так и должны называться - access$102? Нет похожих.
Что означают цифры?
Да, именно так. Цифры не означают ничего, они просто будут разными для разных полей.
Пример:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
class A {
  private boolean field;
  class B {
    B() {
      field = false;
    }
  }
}


после декомпиляции javap превращается в
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
class A$B {
  final A this$0;

  A$B(A);
    Code:
       0: aload_0       
       1: aload_1       
       2: putfield      #1                  // Field this$0:LA;
       5: aload_0       
       6: invokespecial #2                  // Method java/lang/Object."<init>":()V
       9: aload_1       
      10: iconst_0      
      11: invokestatic  #3                  // Method A.access$002:(LA;Z)Z
      14: pop           
      15: return        
}

class A {
  A();
    Code:
       0: aload_0       
       1: invokespecial #2                  // Method java/lang/Object."<init>":()V
       4: return        

  static boolean access$002(A, boolean);
    Code:
       0: aload_0       
       1: iload_1       
       2: dup_x1        
       3: putfield      #1                  // Field field:Z
       6: ireturn       
}

При этом, если декомпилировать класс A JADом, он синтетические методы убирает и подставляет вместо них нормальный исходник:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
class A
{
    class B
    {

        final A this$0;

        B()
        {
            this$0 = A.this;
            super();
            field = false;
        }
    }


    A()
    {
    }

    private boolean field;

}

а вот если пытаться декомпилировать отдельно A$B, то синтетические методы остаются:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
class cess._cls002
{

    final A this$0;

    t>()
    {
        this$0 = A.this;
        super();
        A.access$002(A.this, false);
    }
}


Так что вам скорее всего просто стоит запускать декомпилятор только на класс-файлах без $ в имени.
...
Рейтинг: 0 / 0
Java. Ошибки после декомпиляции.
    #37874572
drewha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Разобрался. Я просто декомпилировал другим декомпилятором, и у меня не было содержимого методов acсess$.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java. Ошибки после декомпиляции.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]