Я полагаю, что запуск точки с Распределенной системой управления версиями (как подвижный или мерзавец). Существуют некоторые advandtages использования его:
Это ограничение существует, потому что ваш требование довольно необычно и может быть получено с помощью очень похожей (и только немного более подробной) конструкции. Java поддерживает анонимные блоки кода для ограничения области действия, если вы действительно хотите это сделать:
public void method(int a) {
int outerVar = 4;
{
long variable = obj.operation();
for (int i = 0; i < 15; i++) { ... }
}
}
Ваш пример:
for (int i = 0, long variable = obj.operation(); i < 15; i++) { ... }
является недопустимым по той же причине, что:
int i = 0, long variable = obj.operation();
сам по себе был бы недопустимым. Запятая не запускает новый оператор. Обе части, до и после запятой, являются частью одного оператора. Этот оператор объявляет и инициализирует список переменных int
. Во всяком случае, об этом сообщает компилятору идентификатор int
в начале строки. длинный
идентификатор после запятой является ошибкой, так как для объявления переменной (ов) другого типа необходимо начать новый оператор.
Итак, синтаксис предназначен для ( expr ; expr ; expr ), и вы не можете объявить две переменные разные типы в одном выражении. Так что это не имеет ничего общего с переменной цикла .
@jsight прав, но я думаю, что настоящая причина в простоте синтаксиса. Предположим, что Java допускает тип или новое имя переменной после первой запятой. Поскольку Java не требует прямого объявления, идентификатор, следующий за запятой, может быть новым именем переменной, существующим именем класса или именем класса, которое ранее не встречалось. Теперь с этим можно справиться, но:
(IMO, синтаксическая сложность - один из недостатков C и особенно C ++. Я проделал много кода в обоих случаях, но мне до сих пор иногда трудно декодировать сообщения об ошибках синтаксиса.)
Согласно спецификации , инициализация оператора for может быть списком выражений оператора, которые оцениваются и отбрасываются, или одним оператором объявления переменной. Оператор объявления переменной может объявлять несколько переменных, но все они одного типа.
Итак, вы можете сделать это:
for (int i = 0, variable = obj.operation(); i < 15; i++) { ... }
Но в этом случае переменная будет определяться как int.