DataflowAnomalyAnalysis: обнаружена DD-аномалия для переменной variable (строки n1 - n2).
DataflowAnomalyAnalysis: обнаружена DU-аномалия для переменной variable (строки n1 - n2).
Без понятия.
NullAssignment: присвоение объекту значения null - это запах кода. Рассмотрите возможность рефакторинга.
Не будет ли установка объекта null
способствовать сборке мусора, если объект является локальным объектом (не используется вне метода)? Или это миф?
Объекты в локальных методах помечаются как подлежащие сборке мусора после возврата из метода. Установка для них значения null не будет иметь никакого значения.
Поскольку это сделало бы разработчиков менее опытными, то, что это за нулевое присвоение, все это можно рассматривать как запах кода.
MethodArgumentCouldBeFinal: параметр 'param' не назначен и может быть объявлен окончательным
LocalVariableCouldBeFinal: локальная переменная 'variable' может быть объявлена окончательной
Есть ли преимущества в использовании final
параметров и переменных?
Это проясняет, что значение не изменится в течение жизненного цикла объекта.
Кроме того, если кто-то случайно попытается присвоить значение, компилятор предотвратит эту ошибку кодирования при типе компиляции.
учти это:
public void businessRule( SomeImportantArgument important ) {
if( important.xyz() ){
doXyz();
}
// some fuzzy logic here
important = new NotSoImportant();
// add for/if's/while etc
if( important.abc() ){ // <-- bug
burnTheHouse();
}
}
Предположим, вам поручено решить какую-то загадочную ошибку, которая время от времени сжигает дом.
Вы знаете, какой параметр был использован, но вы не понимаете, ПОЧЕМУ метод burnTHeHouse
вызывается, если условия не выполняются (согласно вашим выводам)
Вам понадобится некоторое время, чтобы узнать, что в какой-то момент в середине кто-то изменил ссылку и что вы используете другой объект.
Использование final
помощи для предотвращения подобных ситуаций.
LooseCoupling: избегайте использования таких типов реализации, как LinkedList; вместо этого используйте интерфейс
Если я знаю, что мне конкретно нужен LinkedList
, почему бы мне не использовать его, чтобы ясно заявить о своих намерениях будущим разработчикам? Одно дело - вернуть класс, который находится наверху пути к классам, что имеет смысл, но почему бы мне не объявить свои переменные самыми строгими?
В этом случае нет никакой разницы. Я думаю, что, поскольку вы не используете LinkedList
определенные функции, предложение является справедливым.
Сегодня LinkedList может иметь смысл, но, используя интерфейс, вы помогаете себе (или другим) легко изменить его, когда этого не произойдет.
Для небольших личных проектов это может вообще не иметь смысла, но, поскольку вы уже используете анализатор, я думаю, вы уже заботитесь о качестве кода.
Кроме того, помогает менее опытному разработчику сформировать полезные привычки. [Я не говорю, что вы один, но анализатор вас не знает;)]
AvoidSynchronizedAtMethodLevel: используйте уровень блока, а не синхронизацию на уровне метода
Какие преимущества дает синхронизация на уровне блоков перед синхронизацией на уровне методов?
Чем меньше синхронизированный раздел, тем лучше. Вот и все.
Кроме того, если вы синхронизируете на уровне метода, вы заблокируете весь объект. Когда вы синхронизируете на уровне блоков, вы просто синхронизируете этот конкретный раздел, в некоторых ситуациях это то, что вам нужно.
AvoidUsingShortType: не используйте короткий тип
Моими первыми языками были C и C ++, но почему в мире Java мне не следует использовать тип, который лучше всего описывает мои данные?
Я никогда не слышал об этом и согласен с вами :) Я никогда не использовал короткие.
Я предполагаю, что, не используя его, вы поможете себе легко перейти на int
.
Запахи кода больше ориентированы на качество кода, чем на оптимизацию производительности. Так что советы даны менее опытным программистам и помогут избежать ловушек, чем повысить скорость выполнения программы.
Таким образом, вы можете сэкономить много времени и сэкономить нервы, пытаясь изменить код, чтобы он соответствовал лучшему дизайну.
Если совет не имеет смысла, просто игнорируйте их, помните, что вы ответственный разработчик, а инструмент - всего лишь инструмент. Если что-то пойдет не так, нельзя винить инструмент, верно?
23.10.2009
char
, но это тоже не имеет отношения к этому вопросу. 01.04.2016