当前位置: 首页 > 面试题库 >

抽象类的Lambda表达式

司空鸿熙
2023-03-14
问题内容

我有一个带有一个抽象方法的抽象类。如何使用lambda表达式实例化它。因为它扩展了一个类,所以不能将其制成接口。

public class Concrete<T> {
    // Has a bunch of predefined methods.
}


public abstract class Abstract<T> extends Concrete<T> {
    public T getSomething();
    // Uses inherited methods from Concrete class
}

public class Driver {
    public static void main(String[] args) {
        System.out.println(new Abstract<String>() {
            public String getSomething() {
                // Returns something using inherited methods from Abstract              
                // Class and Concrete Class
            }
        });
    }
}

问题答案:

正如Sleiman Jneidi在回答中指出的那样,您不能直接使lambda表达式目标成为抽象类。但是,您可以使用一种解决方法:

public class AbstractLambda<T> extends Abstract<T>
{
    private final Supplier<? extends T> supplier;
    public AbstractLambda(Supplier<? extends T> supplier)
    {
        this.supplier = supplier;
    }

    @Override
    public T getSomething()
    {
        return this.supplier.get();
    }
}

可以与lambda表达式一起使用:

Abstract<String> a = new AbstractLambda<>(() -> "Hello World");
System.out.println(a.getSomething()); // prints 'Hello World'

如果您的getSomething(...)方法有参数,请使用包中的java.util.function.Function或适当的接口java.util.function代替java.util.function.Supplier

这也是java.lang.Thread让您使用Runnablelambda而不是子类化的方式:

Thread t = new Thread(() -> System.out.println("Hello World"));
t.start();


 类似资料:
  • “动物”可以是猫或狗。不幸的是,当我这样做时,我得到了一个异常,因为没有为抽象类Animal创建表。有没有人知道我如何使用ActiveAndroid来实现这一点?

  • Lambda表达式在Java 8中引入,并被吹捧为Java 8的最大特性.Lambda表达式有助于函数式编程,并简化了很多开发。 语法 (Syntax) lambda表达式的特征在于以下语法。 parameter -> expression body 以下是lambda表达式的重要特征。 Optional type declaration - 无需声明参数类型。 编译器可以从参数的值推断出相同的

  • (译注:目前支持lambda的gcc编译器版本为4.5,其它详细的编译器对于C++11新特性的支持请参考http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport) Lambda表达式是一种描述函数对象的机制,它的主要应用是描述某些具有简单行为的函数(译注:Lambda表达式也可以称为匿名函数,具有复杂行为的函数可以采用命名函数对象,当然,何谓复杂

  • 问题内容: 在Java 8中,引入了 lambda表达式 来帮助减少样板代码。如果接口只有一种方法,则可以正常工作。如果它包含多个方法,则所有方法均无效。如何处理多种方法? 我们可以去看下面的例子 那么,在主体本身中定义方法的主体函数的结构将是什么? 问题答案: Lambda表达式只能与Eran所说的函数接口一起使用,但是如果您确实需要接口中的多个方法,则可以在需要时将修饰符更改为或在实现它们的类

  • 如何在lambda表达式中将对象设置为另一个?我犯了错误

  • 问题内容: Java8中添加了Lambda表达式。我想理解为什么这很重要。对于尚未接触函数式编程习惯的Java程序员意味着什么?这是否意味着我可以编写出性能更好的代码或可大规模扩展的代码,还是只会使代码的详细程度降低。或全部。 问题答案: Oracle已经提供了有关该主题的教程。它列出了几个很好的用例。 在找到链接之前,我要说的是lambda表达式可让您将“函数”传递给代码。因此,您可以更轻松地编