【问题标题】:How to convert Lambda into simple Java function如何将 Lambda 转换为简单的 Java 函数
【发布时间】:2016-04-07 12:26:09
【问题描述】:

我正在尝试理解 java 中的一个程序,它使用 lambda 将对象返回到接口的引用变量中。我想把 lambda 转换成简单的 java 函数,但不知道怎么做。

程序如下:-

public abstract class Performance implements Serializable
{ 
Iterface_name vehicle =(Iterface_name & Serializable) () ->{return new Object();};
Object speed() 
{
    return vehicle.speed();
}
}

界面如下:-

public interface Iterface_name 
{
Object speed();
}

如何在不使用lambda的情况下将这个程序转换成简单的java程序进行学习。请帮忙。

【问题讨论】:

    标签: java lambda abstract


    【解决方案1】:

    您可以将 lambda 表达式替换为您自己的 Iterface_name 接口实现。

    class Interface_name_impl implements Iterface_name {
        @Override
        public Object speed() {
            return new Object();
        }
    }
    

    随后,您可以将使用 lambda 表达式的语句替换为

    Iterface_name vehicle = new Interface_name_impl();
    

    您甚至可以使用匿名类,而无需明确拥有上述实现Iterface_name的类

    Iterface_name vehicle1 = new Iterface_name() {
        @Override
        public Object speed() {
            return new Object();
        }
    };
    

    另一方面,您甚至可以简单地从

    Iterface_name vehicle =(Iterface_name & Serializable) () ->{return new Object();};
    

    Iterface_name vehicle = () -> new Object();
    

    甚至更短的版本是

    Iterface_name vehicle = Object::new;
    

    如果您想了解编译器如何在内部实现 lambda,您可以通过 Java-8-Lambdas-A-Peek-Under-the-Hood

    【讨论】:

    • 非常感谢 Madhusudana。这真的很有帮助。我想问你,对 (Iterface_name & Serializable) 的类型转换是否有任何区别,以及 (&) 在这里做什么。
    • @ela 如果您同时使用vehicle =(Iterface_name & Serializable)...,它允许我们将vehicle 类型转换为上述任何一种类型。您可以使用instanceof 运算符对vehicle 和两者都会返回 true。无论如何,如果你不使用(Iterface_name & Serializable),它不能被类型转换为可序列化,只能被类型转换为Iterface_name
    • 再次感谢。你给出的这个解释消除了我的怀疑。我试图在网上搜索正确的解释,但没有得到任何解释。非常感谢。
    【解决方案2】:

    完全删除该字段。这是一样的:

    public abstract class Performance implements {
        Object speed() {
            return new Object();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 2022-11-26
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多