gpt4 book ai didi

lambda - Java 8 构造函数引用的类型是什么?

转载 作者:行者123 更新时间:2023-12-05 00:13:32 25 4
gpt4 key购买 nike

使用以下模型:

package supplier;

public interface Shape {
void draw();

public static class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}

public static class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}

public static class Square implements Shape {
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
}

我试图了解 Java 如何确定构造函数引用返回的 lambda 表达式的类型:
    Shape square = Square::new;
System.out.println("square: "+square);

Supplier<Shape> suppSquare = Square::new;
System.out.println("suppSquare: "+suppSquare);
square: supplier.ShapeFactoryTest$$Lambda$11/183264084@1c655221
suppSquare: supplier.ShapeFactoryTest$$Lambda$12/1490180672@1b701da1

这两种情况似乎都返回 lambda,但是以下内容无法编译:
square = suppSquare;

那么它如何在第一种情况下将 lambda 解析为基础类型?

最佳答案

您的 Shape 接口(interface)是一个函数式接口(interface),因为它有一个抽象方法 draw() .此方法不接受任何参数,并且不返回任何内容。因此,它类似于 Runnable。

Square 的构造函数不接受任何参数,它“返回”(或者更确切地说,创建)的内容可以被忽略。所以它可以用作 Shape 的实现。功能接口(interface):它的签名是兼容的。这就是为什么您可以使用

Shape square = Square::new;

它定义了一个变量 square类型 Shape .

但这并没有多大意义,因为在变量 square 上调用 draw() 时,您可能希望发生一些绘图。但这不会发生。 Square 的构造函数只会被调用,仅此而已。

并且在做
square = suppSquare;

不可能工作,因为 square 是 Shape 类型的变量,而 Shape 不是 Supplier<Shape> 的父类(super class)型.

关于lambda - Java 8 构造函数引用的类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48479242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com