【问题标题】:How do I implement two abstract methods in Java using lambdas?如何使用 lambda 在 Java 中实现两个抽象方法?
【发布时间】:2016-11-15 14:08:15
【问题描述】:

我在下面的代码中有一个功能接口,它有一个抽象方法和一个对象方法覆盖。所以当我为此编写 Lambda 表达式时,我该如何实现我的 equals 方法。

import static java.lang.System.out;

public class Test {
    public static void main(String[] args) {
        AddToString test = a -> (a + " End");
        out.println(test.stringManipulation("some string"));
        out.println(test.increment(5));
        out.println(test.equals(null));
    }
}

@FunctionalInterface
interface AddToString {
    String stringManipulation(String a);
    default int increment(int a) { return a+1; }
    @Override
    public boolean equals(Object obj);
} 

一种方法是创建如下所示的匿名类,但有没有更好的方法使用 lambda 表达式 -

public class Test {
    public static void main(String[] args) {
        AddToString test = new AddToString() {
            public String stringManipulation(String a) {
                return a + " End";
            }
            @Override
            public boolean equals(Object Obj) {
                //Just testing whether it overrides
                return 5==5;
            }
        };
        out.println(test.stringManipulation("some string"));
        out.println(test.increment(5));
        out.println(test.equals(null));
    }
}

【问题讨论】:

  • 一个基于 equals 的合理 lambda 表达式应该如何实现,它既不能访问 this 也不能访问任何接口的方法?即使是基于匿名类的实现也很难想象。

标签: java lambda interface functional-programming java-8


【解决方案1】:

你不能。如果你需要覆盖equals,你需要创建一个类(匿名或其他),你不能用 lambda 来做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2022-11-20
    • 2016-07-14
    • 1970-01-01
    • 2015-08-31
    • 2013-05-30
    相关资源
    最近更新 更多