javase问题。嗯是的。你没看错

img


我知道第5行要一个接口实现类。我现在脑子就没转过来。为什么第11行可以直接写接口,我主方法就不行呢?

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);
        }
    }
}