360免费做网站电话seo专业论坛
局部变量类型推断是java10开始新增的新特性,java11中对局部变量推断进行了升级,var支持添加注解的语法格式,Java10中是无法实现的,在Java11中加入了这样的语法。
Lambda中使用var修饰符
Java11允许在lambda表达式中使用var,它可用于将修饰符应用于局部变量。
package com.morris.java11;import java.util.function.BinaryOperator;/*** Lambda中使用var*/
public class LambdaVarDemo {public static void main(String[] args) {BinaryOperator<Integer> bo = (@Deprecated var value1, @Deprecated var value2) -> value1 + value2;}
}
使用限制
lambda表达式中,注解修饰变量的时候,变量的数据类型必须要写,不能省略,像下面这种写法就是错误的:
Consumer<String>con =(@Deprecated t)->System.out.println(t.toLowerCase()); // 错误语法
这个时候就必须要为小括号中的参数添加数据类型,应该这样写:
Consumer<String>con =(@Deprecated String t)->System.out.println(t.toLowerCase());
java11中,lambda表达式中的参数数据类型可以使用var,但是不能不写:
Consumer<String>con =(@Deprecated var t)->System.out.printin(t.toLowerCase());
var修饰符不能与其他参数混合使用。以下将抛出编译错误:
BinaryOperator<Integer> bo2 = (var value1, value2) -> value1 + value2; // 错误语法
var修饰符不能与其他类型参数混合使用。以下将抛出编译错误:
BinaryOperator<Integer> bo3 = (var value1, Integer value2) -> value1 + value2; // 错误语法
var修饰符只能与括号一起使用。以下将抛出编译错误:
Consumer<Integer> consumer = var value1 -> System.out.println(value1); // 错误语法