11行是方法的定义,方法内不能定义方法,因此主方法内语法存在错误,如果想要调用定义的方法,可以如下改写。
public class Test {
public static void main(String[] args) {
// 正常调用
useStringHandler(new CustomStringHandler());
//匿名类调用
useStringHandler(new StringHandler() {
@Override
public void printMessage(String msg) {
System.out.println(msg);
}
});
// lambda 表达式调用
useStringHandler(System.out::println);
}
public static void useStringHandler(StringHandler handler) {
handler.printMessage("hahaha");
}
interface StringHandler {
void printMessage(String msg);
}
private static class CustomStringHandler implements StringHandler {
@Override
public void printMessage(String msg) {
System.out.println(msg);
}
}
}