Почему люди так решительны о создании каждой переменной в классе "финал"? Я не полагаю, что существует любое истинное преимущество для добавления финала к частным локальным переменным, или действительно использовать финал для чего-либо кроме констант и передающих переменных в анонимные внутренние классы.
Я не надеюсь запускать любой вид войны пламени, я просто честно хочу знать, почему это настолько важно для некоторых людей. Я пропускаю что-то?
В одном из событий страницы формы можно проверить возврат.
Если вы хотите выполнить какое-либо действие после возврата, которое включает создание элементов управления или манипулирование состоянием просмотра, вы можете войти в более раннее событие, такое как 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-Намерение. Другие пользователи, изменяющие ваш код, не изменят значения, которые они не должны изменять.
Оптимизация компилятора может быть выполнена, если компилятор знает, что значение поля никогда не изменится.
Кроме того, если КАЖДАЯ переменная в классе является конечной (как вы ссылаетесь в своем сообщении), то у вас есть неизменяемый класс (при условии, что вы не выставляете ссылки на изменяемые свойства), который является отличным способом достижения безопасности потоков.
Одно преимущество для параллельного программирования, которое еще не было упомянуто:
Финальные поля гарантированно инициализируются после завершения выполнения конструктора.
Проект, над которым я сейчас работаю on настроен таким образом, что всякий раз, когда вы нажимаете «сохранить» в Eclipse, модификатор final
добавляется к каждой переменной или полю, которые не изменяются в коде. И это еще никому не повредило.
Есть много веских причин использовать окончательное, как отмечается в других местах. Одно из мест, где это не имеет смысла, IMO, - по параметрам метода. Строго говоря, ключевое слово здесь добавляет ценность, но значение не достаточно велико, чтобы выдержать некрасивый синтаксис. Я бы предпочел выражать подобную информацию с помощью юнит-тестов.
Я думаю, что использование значений final over, которые являются внутренними по отношению к классу, является излишним, если класс, вероятно, не будет унаследован. Единственное преимущество - это оптимизация компилятора, которая, безусловно, может принести пользу.
Обратной стороной является то, что
annoy it is hard
annoy to read
annoy code or anything
annoy else when it all
annoy starts in the
annoy same way
Помимо очевидного использования для создания константы и предотвращение создания подклассов / переопределения, в большинстве случаев это личное предпочтение, поскольку многие считают, что преимущества «демонстрации намерений программиста» перевешиваются реальной читабельностью кода. Многие предпочитают немного меньше подробностей.
Что касается оптимизации, это плохая причина для ее использования ( во многих случаях бессмысленно ). Это наихудшая форма микрооптимизации, которая во времена JIT бесполезна.
Я бы посоветовал использовать его, если хотите, но не надо, если вам это нравится. Поскольку во многих случаях все сводится к религиозным аргументам, не беспокойтесь об этом.
самый простой способ сделать это - использовать шлюз 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- Это означает, что я не ожидаю изменения этого значения, что является бесплатной документацией. Практика заключается в том, что четко сообщает о намерении этой переменной и заставляет компилятор проверить это. Кроме того, он позволяет компилятору выполнять оптимизацию.
Это важно, потому что неизменность особенно важна при работе с моделью общей памяти. Если что-то неизменяемое, то оно потокобезопасное, что делает его достаточно хорошим аргументом, которому можно следовать в качестве передовой практики.