java - 供构造函数引用的供应商接口(interface)

标签 java interface method-reference supplier

下面的代码

Supplier<String> newString = String::new;
System.out.println(newString.get());
// prints an empty string (nothing) to the console and then a newline character

以及供应商获取方法的定义

T get()

get方法应该返回T,但是构造函数没有返回类型,那么为什么String::new可以分配给Supplier

最佳答案

我认为两个例子可以解释它,首先你想要的是一个提供有意义的字符串来打印的供应商。就像,

Supplier<String> newString = () -> "test";
System.out.println(newString.get());

提供的是一个空字符串。就像,

System.out.println(new String());

生成一个空字符串是完全有效的,即使结果偏离了您的预期。

额外第三个示例,详细说明第一个示例,在 lambda 表达式中,您实际上正在实现 single abstract method从功能接口(interface) - 特别是 Supplier<T> 。就像,

Supplier<String> newString = new Supplier<String>() {
    @Override
    public String get() {
        return "test"; // originally return new String()
    }
};
System.out.println(newString.get());

关于java - 供构造函数引用的供应商接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60138689/

相关文章:

java - 字符串中的表达式到数组列表

c# - 通用列表的接口(interface)继承

arrays - 遥控接口(interface): Passing multidimensional arrays

Java 8 未绑定(bind)引用语法之争

java - 方法引用的类型是什么?

java - 用方法引用替换 lambda 表达式

java - $ 在 Java 类名中有什么影响

java - 在 Brian Goetz 的 Java Concurrency In Practice 中,为什么 Memoizer 类没有使用 @ThreadSafe 注释?

c# - c# 中继承和接口(interface)的意外行为

java - 将 Guava 表值写入java中的文件中