java 如何为具有多个方法的接口定义Lambda表达式?

8dtrkrch  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(121)

我不能为下面代码中显示的具有多个方法的接口定义lambda表达式。

interface Interface{
    public void st1();
    public String ra(String p);
}

我可以为单方法接口定义lambda表达式。

interface Interface{
    public String ra(String p);
}

public static void main(String[] args) {
    Interface r = (x)->{
        return x;
    };
    String getValue = r.ra("string");
    System.out.println(getValue);
}

但是如何为多个方法定义一个lambda表达式呢?

wmomyfyw

wmomyfyw1#

你考虑的是函数接口。用lambda表达式匿名定义一个类是一种语法糖,它只适用于只有一个方法的接口。如果你有不止一个方法,你必须求助于一个老式的匿名类:

Interface r = new Interface() {
    public void st1() {
        // do something;
    }

    public String ra(String p) {
        return p;
    }
}
h43kikqp

h43kikqp2#

如果你更喜欢它的外观,你可以这样写:

interface Interface{
    public void st1();
    public String ra(String p);
    public static Interface build(Runnable st1, Function<String,String> ra) {
        return new Interface() {

            @Override
            public void st1() {
                st1.run();
            }

            @Override
            public String ra(String p) {
                return ra.apply(p);
            }
        };
    }
}

public class Test {
    public static void main(String[] args) {
        Interface thing = Interface.build(
                () -> System.out.println("foo"),
                String::toUpperCase
        );
    }
}

也许在某些情况下这一点更清楚。
如果您有两个具有相同签名的方法,我 * 不 * 推荐这样做--除非您使用builder模式,但这样一个简单的匿名类可能会更清楚。

相关问题