В документации PMD содержится сводка правила AccessorMethodGeneration , с моим акцентом:
При доступе к закрытому полю / методу из другого класса, Java
компилятор сгенерирует методы доступа с package-private
видимость. Это добавляет накладные расходы и рассчитывает на метод dex
Android. Этой ситуации можно избежать, изменив видимость
поле / метод от private до package-private.
Таким образом, PMD советует вам, что если вы сделаете такие члены и методы пакетными, а не частными, вы избежите накладных расходов, связанных с доступом к ним через методы доступа, сгенерированные компилятором. (Я не являюсь разработчиком Android, поэтому я не могу комментировать проблему «количества методов dex».)
Это пример кода, который PMD предоставляет в отношении частных членов:
public class OuterClass {
private int counter;
/* package */ int id;
public class InnerClass {
InnerClass() {
OuterClass.this.counter++; // wrong accessor method will be generated
}
public int getOuterClassId() {
return OuterClass.this.id; // id is package-private, no accessor method needed
}
}
}
И вот пример SO , где компилятор будет автоматически генерировать код для доступа к закрытым методам. Обратите внимание на комментарий автора (с моим акцентом):
Компилятор берет внутренние классы и превращает их в верхний уровень
классы. Поскольку закрытые методы доступны только для внутреннего класса
компилятор должен добавить новые "синтетические" методы, которые имеют пакет
уровень доступа , чтобы классы верхнего уровня имели к нему доступ.
Таким образом, PMD помечает код, в котором вы можете улучшить производительность (что, я думаю, обычно незначительно) в некоторых сценариях, изменив доступ к закрытым членам и закрытым методам.
Еще один момент, на который стоит обратить внимание, это то, что некоторые сообщения об ошибках PMD AccessorMethodGeneration не работают должным образом (например, https://github.com/pmd/pmd/issues/274 и https://github.com/pmd/pmd/issues/342). Так что если вы не можете понять, почему PMD помечает ваш код предупреждением AccessorMethodGeneration , проверьте отчеты об ошибках.