Java中是否有自动类型推断?

2022-08-31 07:34:12

Java中是否有像C++中那样的变量类型?auto

例如:

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中的新功能


答案 1

可能是Java 10有你(和我)想要的,通过关键字。var

var list = new ArrayList<String>();  // infers ArrayList<String>
var stream = list.stream();          // infers Stream<String>

来自 JDK 增强建议 286


更新:是的,这个特性进入了Java 10版本!


答案 2

Java 10引入了一个标识符,就像C++;看到对不起小姐杰克森的答案varauto

在Java 10之前,没有与关键字等效的关键字。可以通过以下方式实现相同的循环:auto

for ( Object var : object_array)
  System.out.println(var);

Java 具有局部变量,其作用域位于定义它们的块内。与 C 类似,C++,但没有 auto 或 register 关键字。但是,Java 编译器将不允许使用未显式初始化的局部变量,并且会给出编译错误(与编译器通常只发出警告的 C 和 C++不同)。礼貌:维基百科

Java中没有任何像C++那样的主流类型推断。有一个RFE,但被关闭为“不会修复”。给出的是:

人类以两种方式从类型声明的冗余中受益。首先,冗余类型充当有价值的文档 - 读者不必搜索getMap()的声明来找出它返回的类型。其次,冗余允许程序员声明预期的类型,从而受益于编译器执行的交叉检查。


推荐