Java中有自动types推断吗?
Java中有像C ++中那样的auto
variablestypes吗?
一个例子:
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中有一个增强的循环,但有一个汽车? 如果没有,是否有这样做的黑客? 我指的是C ++ 11中的新function
在问题被解答之前回答:
没有在Java中没有auto
variablestypes。 同样的循环可以实现为:
for ( Object var : object_array) System.out.println(var);
Java有局部variables,其范围在已定义的块内。 与C和C ++类似,但没有自动或注册关键字。 但是,Java编译器将不允许使用未经显式初始化的本地variables,并且会给出编译错误(不同于C和C ++,编译器通常只会给出警告)。 礼貌: 维基百科 。
不,在C ++等Java中没有任何主stream的类推。 有一个RFE,但这是封闭的“不会修复”,原因是:
人类以两种方式从types声明的冗余中受益。 首先,冗余types作为有价值的文档 – 读者不必searchgetMap()的声明来找出它返回的types。 其次,冗余允许程序员声明预期的types,从而受益于编译器执行的交叉检查。
Java 7引入了菱形语法
Box<Integer> integerBox = new Box<>(); // Java 7
和老java相比
Box<Integer> integerBox = new Box<Integer>(); // Before Java 7
关键的读者会注意到,这个新的语法并没有帮助在原始问题中编写for循环。 这是正确的,完全是故意的。 请参阅引用Oracle错误数据库的其他答案。
在Java 8中,您可以使用lambdatypes推断来避免声明types。 提问者的例子的模拟将是:
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);
总之,不,没有汽车types。 如果你所做的只是打印值,那么你可以把这个值作为一个Object
来引用。
这不是一个纯粹的Java解决scheme,但是添加一个名为lombok的库将使下面的魔法能够编译和工作,非常类似于C ++中的auto
关键字
List<String> strList = Arrays.asList("foo", "bar", "baz"); for (val s: strList){ System.out.println(s.length()); }
可能是Java 10有你(我)想要的,通过var
关键字。
var list = new ArrayList<String>(); // infers ArrayList<String> var stream = list.stream(); // infers Stream<String>
来自JDK增强build议286