Чрезмерное использование финала может повредить больше, чем делают хорошее?

Почему люди так решительны о создании каждой переменной в классе "финал"? Я не полагаю, что существует любое истинное преимущество для добавления финала к частным локальным переменным, или действительно использовать финал для чего-либо кроме констант и передающих переменных в анонимные внутренние классы.

Я не надеюсь запускать любой вид войны пламени, я просто честно хочу знать, почему это настолько важно для некоторых людей. Я пропускаю что-то?

9
задан Tim Michalski 10 February 2010 в 05:26
поделиться

8 ответов

В одном из событий страницы формы можно проверить возврат.

Если вы хотите выполнить какое-либо действие после возврата, которое включает создание элементов управления или манипулирование состоянием просмотра, вы можете войти в более раннее событие, такое как Page_Init.

Попробуйте:

protected void Page_Init(object sender, EventArgs e)
    {
        if (Page.IsPostBack)
        {
            //Check for your conditions here, 

            if (Page.IsAsync)
            {
                //also you may want to handle Async callbacks too:
            }
        }
    }
-121--2904345-

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

-121--3219330-
  1. Намерение. Другие пользователи, изменяющие ваш код, не изменят значения, которые они не должны изменять.

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

Кроме того, если КАЖДАЯ переменная в классе является конечной (как вы ссылаетесь в своем сообщении), то у вас есть неизменяемый класс (при условии, что вы не выставляете ссылки на изменяемые свойства), который является отличным способом достижения безопасности потоков.

13
ответ дан 4 December 2019 в 06:35
поделиться

Одно преимущество для параллельного программирования, которое еще не было упомянуто:

Финальные поля гарантированно инициализируются после завершения выполнения конструктора.

3
ответ дан 4 December 2019 в 06:35
поделиться

Проект, над которым я сейчас работаю on настроен таким образом, что всякий раз, когда вы нажимаете «сохранить» в Eclipse, модификатор final добавляется к каждой переменной или полю, которые не изменяются в коде. И это еще никому не повредило.

2
ответ дан 4 December 2019 в 06:35
поделиться

Есть много веских причин использовать окончательное, как отмечается в других местах. Одно из мест, где это не имеет смысла, IMO, - по параметрам метода. Строго говоря, ключевое слово здесь добавляет ценность, но значение не достаточно велико, чтобы выдержать некрасивый синтаксис. Я бы предпочел выражать подобную информацию с помощью юнит-тестов.

1
ответ дан 4 December 2019 в 06:35
поделиться

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

0
ответ дан 4 December 2019 в 06:35
поделиться

Обратной стороной является то, что

annoy it is hard
annoy to read
annoy code or anything
annoy else when it all 
annoy starts in the 
annoy same way

Помимо очевидного использования для создания константы и предотвращение создания подклассов / переопределения, в большинстве случаев это личное предпочтение, поскольку многие считают, что преимущества «демонстрации намерений программиста» перевешиваются реальной читабельностью кода. Многие предпочитают немного меньше подробностей.

Что касается оптимизации, это плохая причина для ее использования ( во многих случаях бессмысленно ). Это наихудшая форма микрооптимизации, которая во времена JIT бесполезна.

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

10
ответ дан 4 December 2019 в 06:35
поделиться

самый простой способ сделать это - использовать шлюз SMS.

там много, я использовал Clickatel , в который я просто выкладываю XML-запрос , и шлюз делает остальное для ничего.

Я сделал это с помощью java и apache common HTTP Client

-121--4222925-

Вы можете проверить возврат в одном из событий страницы для вашей формы.

Если вы хотите выполнить какое-либо действие после возврата, которое включает в себя создание элементов управления или манипулирование состоянием просмотра, вы можете войти в более раннее событие, такое как Page_Init.

Попробуйте:

protected void Page_Init(object sender, EventArgs e)
    {
        if (Page.IsPostBack)
        {
            //Check for your conditions here, 

            if (Page.IsAsync)
            {
                //also you may want to handle Async callbacks too:
            }
        }
    }
-121--2904345-

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

4
ответ дан 4 December 2019 в 06:35
поделиться

Это важно, потому что неизменность особенно важна при работе с моделью общей памяти. Если что-то неизменяемое, то оно потокобезопасное, что делает его достаточно хорошим аргументом, которому можно следовать в качестве передовой практики.

http://www.artima.com/intv/blochP.html

3
ответ дан 4 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: