Перегрузка статических полей на Android - PullRequest
1 голос
/ 19 марта 2012

В ProGuard docs написано: «Виртуальная машина Google Dalvik не может обрабатывать перегруженные статические поля». Как я понял, как то так

public class A {
  private static final Log log = LogFactory.getLog(A.class.getName());
...
}

public class B extends A {
  private static final Log log = LogFactory.getLog(B.class.getName());
...
}

плохо на Android тогда. Это действительно действительно правда или я что-то не так понял? Каковы последствия (я могу запустить свой код сейчас, но dex не работает после процедуры proguard)?

Ответы [ 2 ]

1 голос
/ 20 марта 2012

Полагаю, это означает, что в классе A не может быть двух полей с именами log, каждый из которых имеет разные типы:

public class A {
  private static final Log log = LogFactory.getLog(A.class.getName());
  private static final int log = 5;
  ...
}

Вы не можете сделать это в исходном коде, но такие инструменты, как ProGuard, могут генерировать .class таких файлов, которые делают декомпиляцию более интересной.

Вам не нужно беспокоиться о вашем B extends A примере; это было бы ошибкой в ​​Dalvik. Такая ошибка будет исправлена ​​очень быстро!

0 голосов
/ 19 марта 2012

В Java ключевое слово final означает, что вы не можете переопределить его, поэтому это будет верно.

...