2013-08-21 2 views
0

Рассмотрит следующий случайразличного поведения Sonar для слабо двух подобных сценариев

public void setRules(MyRule[] rules) { 
    this.rules=rules; 
} 

Sonar жалуется и говорит,

Конструкторов и методы, получающие массивы должны клонировать объекты и магазина копии. Это предотвращает, что будущие изменения от пользователя влияют на внутреннюю функциональность .

Это правда, и я получил значение, когда кто-то изменил значение array после установки этого параметра, Это изменение может повлиять на внутренние функции. Если мы клонируем эти изменения массива, это не повлияет.

Теперь рассмотрим другой случай

public void setExecutions(List<MyRule> ruleList) { 
    this.ruleList= ruleList; 
} 

Sonar Теперь не говоря любой вопрос. почему клон здесь не нужен?

+0

Сонар - это IDE ???? возможно, его объект параметра, который действует как клон. –

+0

@SrinathGanesh Нет, это платформа с открытым исходным кодом для непрерывного контроля качества кода. http://en.wikipedia.org/wiki/SonarQube, http://www.sonarqube.org/effective-code-review-with-sonar/ –

+0

этому Q требуется больше внимания –

ответ

2

Фактически для этого правила PMD может быть только одна мотивация: примитивы проходят по значению, а объекты проходят по ссылке. Как насчет массивов? массивы являются объектами в Java и поэтому также передаются по ссылке, но некоторые младшие разработчики могут не знать об этом и могут полагать, что весь массив проходит по значению. Лично я считаю, что это правило бесполезно.

+0

Оба списка и массив являются объектом здесь. Ваш ответ не имеет значения. –

+0

Это была моя точка @Ruchira, оба объекта, но цель этого правила - не запрещать передавать некоторые параметры по ссылке, иначе остановимся на использовании Java. Таким образом, цель этого правила, похоже, предупреждает разработчиков junior java о том, что массивы (даже примитивы) передаются по ссылке, а не по значению. В то время как при использовании класса из коллекции Java нет никакой двусмысленности. –

 Смежные вопросы

  • Нет связанных вопросов^_^