Сонар переименовать этот метод; в родительском классе есть «закрытый» метод с тем же именем - PullRequest
0 голосов
/ 11 января 2019

Сонар жалуется на имя частного метода в классе, когда мы используем то же имя родительского частного метода. Каким недостатком качества кода является определение частного метода с тем же именем родительского частного метода?

Или нам нужно классифицировать это как ложное срабатывание

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Если у вас есть некоторый метод в вашем подклассе с тем же именем, что и у вашего суперкласса, на первый взгляд, это предположение будет переопределено, что приведет к путанице, когда это не так.

В документах упоминаются три ситуации, когда это может произойти:

Метод родительского класса является статическим, а метод дочернего класса - нет.

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

Метод родительского класса частный.

А также рекомендация:

Но если намерение действительно заключается в том, чтобы метод дочернего класса отличался, тогда метод должен быть переименован во избежание путаницы .

Поэтому, если вы действительно хотите , а не переопределить метод из суперкласса, рекомендуется изменить его, чтобы избежать путаницы.

Вы можете проверить пример в RSPEC-2177 - Документация правил сонара ,

Решение переименовать метод или пометить вхождение как ложное срабатывание полностью зависит от того, как команда организует свою кодовую базу , и от соглашения о коде, используемого между разработчиками.

0 голосов
/ 11 января 2019

IHMO, это правило не имеет смысла.
Если наименование имеет смысл как для родителя, так и для подкласса, вы не должны придумывать другое имя для одного из них, чтобы сделать сонар счастливым.
Это может сделать код менее понятным, а также сделать его менее однородным в базовом коде. Закрытые методы видны только внутри текущего класса, поэтому достаточно сделать этот выбор безопасным.

0 голосов
/ 11 января 2019

IMO это потому что это может запутать. Посмотрите ниже, прочитайте комментарий:

class Child extends Super{
   public void myMethod() {
     System.out.println("in child");
   }
 }

 class Super{
   public static void main(String[] args) {
    Super s = new Child(); 
    s.myMethod(); // At this point you might expect myMethod of child to be called if it'll call the Parent's since it is private.
  }
   private void myMethod() {
     System.out.println("in super");
   }
 }
...