Есть ли автоматический вывод типа в Java?
есть 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
6 ответов:
ответил До того, как вопрос был редактировать:
нет
auto
тип переменной в Java. Тот же цикл может быть достигнут как:for ( Object var : object_array) System.out.println(var);
Java имеет локальные переменные, область действия которых находится в блоке, где они были определены. похоже на C и C++, но нет ключевого слова auto или register. Однако компилятор Java не позволит использовать явно не инициализированную локальную переменную и даст ошибку компиляции (в отличие от C и C++, где компилятор обычно выдает предупреждение). вежливость: Википедия.
нет, нет никакого основного вывода типа в Java, как C++ . Там был RFE но это было закрыто как "не исправит", причина дана была:
люди извлекают выгоду из избыточности объявления типа двумя способами. Во-первых, избыточный тип служит в качестве ценной документации-читатели не делают придется искать объявление getMap (), чтобы узнать, какой тип он возвращается. Во-вторых, избыточность позволяет программисту установить введите и тем самым получите выгоду от перекрестной проверки, выполняемой компилятором.
Java 7 представляет синтаксис Алмаз
Box<Integer> integerBox = new Box<>(); // Java 7
по сравнению со старой java
Box<Integer> integerBox = new Box<Integer>(); // Before Java 7
в Java 8 можно использовать вывод типа лямбда, чтобы избежать объявления типа. Аналогом примеров вопрошающего было бы:
object_array.forEach(var -> System.out.println(var)); object_array.forEach(var -> var.do_something_that_only_this_particular_obj_can_do());
оба из которых также могут быть упрощены с помощью ссылок на методы:
object_array.forEach(System.out::println); object_array.forEach(ObjectType::do_something_that_only_this_particular_obj_can_do);
может быть Java 10 имеет то, что вы (и я) хотим, через
var
ключевое слово.var list = new ArrayList<String>(); // infers ArrayList<String> var stream = list.stream(); // infers Stream<String>
С предложения по улучшению JDK 286
обновление: Yap, эта функция попала в выпуск Java 10!
короче говоря, нет, нет автоматического типа. Если все, что вы делаете, это печать значения, вы можете просто ссылаться на значение как
Object
.
это не чистое решение на Java, однако добавление библиотеки под названием Ломбок позволит магии ниже, чтобы скомпилировать и работать очень похоже на
auto
ключевое слово в C++List<String> strList = Arrays.asList("foo", "bar", "baz"); for (val s: strList){ System.out.println(s.length()); }