Доброго времени суток!
В процессе поиска новых интересных средств разработки нашел плагин (программку) PMD, который ищет потенциальные ошибки в коде.
Среди прочих ошибок, которые он мне выдал, были две, о которых хочу спросить.
Как часто часто вы используете модификаторы "final" и "transient" в своём коде?
1. transient,
у меня J2SE приложение, которому сериализация не нужна
(надеюсь, я правильно понимаю суть сериализации, что она используется только для RMI ?)
А если она мне не нужна, то и transient писать не обязательно, или нет?
2. final,
чисто теоретически, все переменные методов, которые не будут (не должны) меняться внутри метода можно (или нужно?) пометить "final".
С другой стороны, просматривая время от времени исходники JDK я не встречал такого кода.
Так имеет ли смысл использовать final таким образом?
А заодно и все переменные, которые были присвоены лишь один раз при инициализации сделать final.
Повысит ли это надёжность программы?
Используете ли вы final в своём коде без особой надобности (когда об этом просит компилятор), или видели ли код с обильным колличеством такового?
final & transient
Модератор: Absurd
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
final - постоянно, т.к не люблю переменные величины. Исключение - счетчики циклов, естественно. К сожалению, final более куцый чем C++ квалификатор const. Поэтому, дать клиенту срез данных только для чтения бывает проблематично.Oscar писал(а):Как часто часто вы используете модификаторы "final" и "transient" в своём коде?
Если класс прямо или косвенно унаследован от Serializable, то тем не менее клиент может его сериализовать. Сериализовать можно и для того чтобы сохранить объект в blob-поле базы данных, например.Oscar писал(а): 1. transient,
у меня J2SE приложение, которому сериализация не нужна
(надеюсь, я правильно понимаю суть сериализации, что она используется только для RMI ?)
По идее - необязательно, но наш код очень обильно сдобрен благодаря code conventions от заказчика. Но конечно же final это не const, и толк от него есть только в случае immutable объектов типа java.lang.String . Подробно об этом пишет Joshua Bloch в Effective Java.Oscar писал(а): чисто теоретически, все переменные методов, которые не будут (не должны) меняться внутри метода можно (или нужно?) пометить "final".
С другой стороны, просматривая время от времени исходники JDK я не встречал такого кода.
Так имеет ли смысл использовать final таким образом?
А заодно и все переменные, которые были присвоены лишь один раз при инициализации сделать final.
Повысит ли это надёжность программы?
Используете ли вы final в своём коде без особой надобности (когда об этом просит компилятор), или видели ли код с обильным колличеством такового?
Тему final раскрывает так же эта статья
http://renaud.waldura.com/doc/java/final-keyword.shtml
2B OR NOT(2B) = FF
По поводу final - если применико к переменной, то значит ссылка, которую содержит данная переменная, не может быть изменена. Но методы (к примеру add в List или append в StringBuffer) дёргаться могут. Соответсвенно содержимое объекта может меняться, но сам объект нет.
Если применимо к методам, то эти методы нельзя будет переопределить, если к классам, то от этих классов нельзя унаследоваться, как вслучае со String.
По поводу надёжности решать тебе
Но константы типа String int и т.п. конечно лучше делать static final
Типа безопасность и оптимизация
Если применимо к методам, то эти методы нельзя будет переопределить, если к классам, то от этих классов нельзя унаследоваться, как вслучае со String.
По поводу надёжности решать тебе

Типа безопасность и оптимизация
Всё об отдыхе на http://chugaga.com
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
mobius, спасибо, способы приминения final мне знакомы,
меня именно интересовало, стоит ли применять его для, так сказать, надёжности.
если каждому неприсваемому в методе параметру (а я сторонник того, чтобы так было всегда) дописывать final, то код IMHO, будет загромаждаться, что может привести к нечитабельности ...
хотя, наверное, это просто дело привычки и стиля ..
меня именно интересовало, стоит ли применять его для, так сказать, надёжности.
если каждому неприсваемому в методе параметру (а я сторонник того, чтобы так было всегда) дописывать final, то код IMHO, будет загромаждаться, что может привести к нечитабельности ...
хотя, наверное, это просто дело привычки и стиля ..
По поводу надёжности... Трудно сказать. На мой взгляд надёжность должна обеспечиваться архитектурой и стилем. Использование fianl ко всему этому... не встречалось как-то
Всё об отдыхе на http://chugaga.com