Java 8静态方法引用报语法错误:需插入分号完成BlockStatements求解答
问题分析与解决
嘿,这个语法错误的原因一眼就能看出来——你在静态方法引用里多写了一对括号!
给你拆解下问题所在:
- 当使用Java 8的方法引用语法(
::)时,我们是把方法本身作为函数式接口的实例,而不是直接调用这个方法。所以完全不需要加调用方法的括号()。 - 你的
MethodReferenceInteface是一个函数式接口,它的getName()方法签名是「无参数,返回String」,而MethodReference.sayName()静态方法正好完全匹配这个签名,所以只需要写方法名即可。
修正后的完整代码
package com.jui.bhav.Practice; interface MethodReferenceInteface{ String getName(); } public class MethodReference { public static String sayName() { return "Jui"; } public static void main(String[] args) { // 去掉sayName后面的括号就解决问题了 MethodReferenceInteface ref1 = MethodReference::sayName; ref1.getName(); } }
简单总结下:方法引用的正确语法是类名::静态方法名,不需要加括号;如果加了括号,Java会认为你是在直接调用方法,而不是把方法作为接口实例赋值,这就和函数式接口的赋值要求冲突了,所以才会抛出语法错误提示。
内容的提问来源于stack exchange,提问作者Jui
相关产品推荐
相关产品推荐

