【问题标题】:How to override two and more methods of interface using Lambda expression?如何使用 Lambda 表达式覆盖两个或多个接口方法?
【发布时间】:2019-02-08 11:56:19
【问题描述】:

1.InterfaceOne 是一个接口有两种方法,我的问题是如何使用 Lambda 表达式覆盖这两种方法?

interface InOne{

    void m1();
    void m2();
}
public class LambdaExpForTwomethodsInInterface {

    public static void main(String[] args) {

        //For One method overriding
        InOne one=()->{
            System.out.println("InOne m1");
        };
        one.m1();
    }
}

2.如果接口中有5个方法,但我只想覆盖一个方法,有没有使用Lambda exp的方法?

【问题讨论】:

  • 你从接口实现方法,不要覆盖。覆盖来自类
  • 实现接口方法被称为覆盖权。这就是为什么提到术语@Evgeni

标签: java lambda


【解决方案1】:

有什么办法可以使用 Lambda exp 吗?

不,它们仅用于引用 FunctionalInterfaces。

如何使用 Lambda 表达式覆盖这 2 个方法?

虽然不可能使用 lambda 表达式,但您仍然可以使用匿名类来实例化它们:

InOne one = new InOne() {
    @Override
    public void m1() {

    }

    @Override
    public void m2() {

    }
};

【讨论】:

【解决方案2】:
interface InOne {
    default void m1() {}
    default void m2() {}
}

实施

InOne one = new InOne() {
    @Override
    public void m1() {
        System.out.println("InOne m1");
    }
};

one.m1();  // InOue m1
one.m2();  // <nothing>

使用 Lambda 实现

@FunctionalInterface
interface InOneM1 {
    void m1();
}

@FunctionalInterface
interface InOneM2 {
    void m2();
}

InOneM1 oneM1 = () -> System.out.println("InOne m1");
InOneM2 oneM2 = () -> System.out.println("InOne m2");

oneM1.m1();
oneM2.m2();

【讨论】:

  • 如果只处理Functional接口,那么它是如何处理减少代码并赋予更多重要性的。我的意思是,一般来说,我们项目的接口中有不止一种方法对..!跨度>
  • 对。 Lambda 仅适用于 函数式接口
  • @oleg.cherednik &lt;empty string&gt; 应该是指void... 顺便说一下,还有另一种组合,其中一个是default,另一个是abstract接口为FunctionalInterface...,但在设计它们时应该考虑到这一点。
  • @mae 并不是每个接口都应该使用 lambdas 来表示。你仍然可以拥有不是FunctionalInterface.. 但为了使用它们,可以设计接口并他们的层次结构。
猜你喜欢
  • 2018-03-14
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
相关资源
最近更新 更多