Java 大佬们 ,来来来做题了? 看看是否能够在心里直接做出来。

78 天前
 jeesk

下面的 test() 方法中有 10 个方法, 你觉得哪些调用无法通过编译?

    @FunctionalInterface
    public interface Executor1 {
        void execute(Runable1 command);
    }

    @FunctionalInterface
    public interface Executor2 extends Executor{
        void execute(Runnable command);
    }

    @FunctionalInterface
    public interface Executor3 extends Executor2{
        void execute(Runnable command);
    }
    public void setMy(Executor e){

    }

    public void setMy1(Executor1 e){

    }

    public void setMy2(Executor2 e){

    }

    @FunctionalInterface
   public  interface Runable1 extends Runnable{

    }

    @FunctionalInterface
    public  interface Runable2 extends Runable1{

    }



    public void test(){
        setMy(Runnable::run);
        setMy(Runable1::run);
        setMy1(Runnable::run);
        setMy1(Runable1::run);
        setMy1(Runable2::run);
        setMy2(Runnable::run);
        setMy2(Runable1::run);

        setMy2(new Executor3() {
            @Override
            public void execute(Runnable command) {

            }
        });
        setMy2(new Executor() {
            @Override
            public void execute(Runnable command) {

            }
        });
        setMy2(new Executor2() {
            @Override
            public void execute(Runnable command) {

            }
        });
    }

}

2219 次点击
所在节点    Java
4 条回复
ZZ74
77 天前
除了
setMy2(new Executor2() {} 其他都过不了吧
lux182
77 天前
大佬看到这 都会默默的叉掉...
chendy
77 天前
完全做不出来
复制粘贴进 IDE 看了一下报错,作为一个大部分时间只会用 IDE 把 lambda 换成方法引用的菜逼,我感觉这个问题过于深奥了
spkingr
77 天前
@ZZ74 是对的,楼主就是想看下方法引用怎么用,首先签名相同的接口在 lambda 中可以通用,类型自动识别,但不能用于具有多个相同签名接口的重载方法,从你下面的三个方法就看出来你的想法。
上面的方法引用应该都不合理,因为你的方法都不是静态方法,那么方法引用必然有一个 this 对象上下文,你这貌似上下文对象都不对,没法执行,你还是想测试相同签名参数的写法吧。
其实,IDEA 参数中 new 的匿名对象它能自动识别帮你转 lambda ,简单的 lambda 如果有对应的方法会自动识别帮你转方法引用,不需要担心这个。
唯一需要自己搞的就是:函数式编程中传递的方法太长,单独写成一个方法,然后使用方法引用传入既简洁又能重用。
大部分情况也还是直接干吧,有 IDEA 呢,再还有 copilot 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1077955

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX