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


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

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

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

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

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

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

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

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

Методы так и должны называться - access$102? Нет похожих.
Что означают цифры?
...
Рейтинг: 0 / 0
11.07.2012, 10:33:51
    #37874408
RomikT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java. Ошибки после декомпиляции.
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
11.07.2012, 12:00:47
    #37874572
drewha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java. Ошибки после декомпиляции.
Спасибо. Разобрался. Я просто декомпилировал другим декомпилятором, и у меня не было содержимого методов acсess$.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Java. Ошибки после декомпиляции. / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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