Есть ли auto
в Java такой тип переменной, как в C ++?
Пример:
for ( auto var : object_array)
std::cout << var << std::endl;
for( auto var : object_array)
var.do_something_that_only_this_particular_obj_can_do();
Я знаю, что в Java есть расширенный цикл for, но есть ли автоматический? Если нет, есть ли какой-нибудь способ это сделать? Я имею в виду новую функцию в C ++ 11
Object
, поэтому для некоторых операций вы можете использоватьObject
там, где хотитеauto
.to_string
функцию объекта , а не сам объект, не так ли?Ответы:
Ответили до того, как вопрос был ИЗМЕНИТЬ :
Нет,
auto
в Java нет типа переменной. Такой же цикл может быть получен как:В Java есть локальные переменные, область видимости которых находится внутри блока, в котором они были определены. Подобно C и C ++, но нет ключевого слова auto или register. Однако компилятор Java не разрешит использование неявно инициализированной локальной переменной и выдаст ошибку компиляции (в отличие от C и C ++, где компилятор обычно выдает только предупреждение). Предоставлено: Википедия .
Нет, в Java нет такого массового вывода типов, как C ++. Был проведен RFE, но он был закрыт как "Не исправить" по следующей причине:
источник
Object
) не могут быть выполнены таким образом. Это не совсем хороший ответ, он работает только потому, что пример в вопросе слабый.auto
в C и до C ++ 11. Ваше редактирование не по теме.var
это зарезервированное ключевое слово, начиная с Java 9.Возможно, в Java 10 есть то, что вы (и я) хотите, через
var
ключевое слово.Из предложений по расширению JDK 286
Обновление: Ага, эта функция появилась в версии Java 10!
источник
var
это не ключевое слово! Из JLS : «var - это не ключевое слово, а скорее идентификатор со специальным значением как тип объявления локальной переменной». Таким образом, в отличие от ключевых слов, вам ничто не мешает вызвать переменную или метод «var».var
действительно нет в списке ключевых слов.В Java 7 представлен ромбовидный синтаксис
По сравнению со старой java
Внимательный читатель заметит, что этот новый синтаксис не помогает при написании циклов for в исходном вопросе. Это кажется правильным и полностью преднамеренным. См. Другой ответ, в котором упоминается база данных ошибок Oracle.
источник
auto integerBox = new Box<Integer>();
это обычно используется для получения возвращаемого значения из функций, которые иногда могут бытьHashMap<String, LinkedList<Operation, Set<Integer>>>
В Java 8 вы можете использовать вывод лямбда-типа, чтобы не объявлять тип. Аналогом примеров вопрошающего может быть:
оба из них также можно упростить с помощью ссылок на методы:
источник
Короче нет, автотипа нет. Если все, что вы делаете, это печатаете значение, вы можете просто ссылаться на значение как на
Object
.источник
hashCode
s, или сбор имен классов, или ... вы поняли;) Однако список короткий. См. Документацию класса Object (комментарий для начинающих, уверен, вы знали, SimonC)Это не чистое решение для Java, однако добавление библиотеки под названием lombok позволит скомпилировать описанную ниже магию и работать очень похоже на
auto
ключевое слово в C ++.источник