java 10引入了var关键字,用于类型推断。 var userChannels = new HashMap < User , List < String > > ( ) ; userChannels会被判断为HashMap<User, List>类型。 var的局限性 var被oracle称为 Local variable Type inference(局部变量类型推断) ,从名字来看,它是有限制的。 不能用在类的字段(fields)和方法签名(method signatures) 。 也就是说,它只能用于方法的局部变量。 public void method(var temp) 声明的同时必须要有初始化表达式 。 var x; 或者 var x = null; 都不被允许,因为没有规定需要推断的类型。 令人困惑的是 var x = ArrayList<>() 居然是正确的代码,x会被判断为 ArrayList< Object > 。 lambda不被支持 。 var foo = () -> {} ,不能用lambda表达式非常遗憾,但是我们需要来思考一个问题:为什么lambda不被支持? 从 lambda的实现方式 说起,lambda表达式是一个模版,JVM会根据lambda表达式生成一个私有静态方法和一个内部类,而内部类实现了函数式接口,然后再在内部类实现接口的方法中