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();
Run Code Online (Sandbox Code Playgroud)
我知道Java中有一个增强的for循环,但是有自动吗?如果没有,是否有这样做的黑客?我指的是C++ 11中的新功能
sor*_*son 53
可能是Java 10通过var
关键字拥有你(和我)想要的东西.
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
Run Code Online (Sandbox Code Playgroud)
来自JDK Enhancement Proposals 286
更新: Yap,该功能使其成为Java 10版本!
NIN*_*OOP 38
在问题被编辑之前回答:
不auto
,Java中没有变量类型.可以实现相同的循环:
for ( Object var : object_array)
System.out.println(var);
Run Code Online (Sandbox Code Playgroud)
Java具有局部变量,其范围位于已定义的块内.与C和C++类似,但没有auto或register关键字.但是,Java编译器不允许使用非显式初始化的局部变量,并且会产生编译错误(与C和C++不同,编译器通常只会发出警告).礼貌:维基百科.
不,像C++这样的Java中没有任何主流的类型推断.有一个RFE,但这被关闭为"无法修复",给出的理由是:
人类以两种方式从类型声明的冗余中受益.首先,冗余类型作为有价值的文档 - 读者不必搜索getMap()的声明来找出它返回的类型.其次,冗余允许程序员声明预期的类型,从而受益于编译器执行的交叉检查.
Tar*_*sch 24
Java 7引入了菱形语法
Box<Integer> integerBox = new Box<>(); // Java 7
Run Code Online (Sandbox Code Playgroud)
与旧的java相比
Box<Integer> integerBox = new Box<Integer>(); // Before Java 7
Run Code Online (Sandbox Code Playgroud)
关键读者会注意到这个新语法无助于在原始问题中编写for循环.这似乎是正确和完全有意的.请参阅引用Oracle错误数据库的其他答案.
Aji*_*rge 17
在Java 8中,您可以使用lambda类型推断来避免声明类型.提问者的例子类似于:
object_array.forEach(var -> System.out.println(var));
object_array.forEach(var -> var.do_something_that_only_this_particular_obj_can_do());
Run Code Online (Sandbox Code Playgroud)
这两个也可以使用方法引用简化:
object_array.forEach(System.out::println);
object_array.forEach(ObjectType::do_something_that_only_this_particular_obj_can_do);
Run Code Online (Sandbox Code Playgroud)
这不是一个纯 Java 解决方案,但是添加一个名为lombok的库将使下面的魔术能够编译和工作,与auto
C++ 中的关键字非常相似
List<String> strList = Arrays.asList("foo", "bar", "baz");
for (val s: strList){
System.out.println(s.length());
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
61265 次 |
最近记录: |