gpt4 book ai didi

java - 奇怪的构造,java将静态方法转换为类

转载 作者:行者123 更新时间:2023-11-29 06:28:33 26 4
gpt4 key购买 nike

我最近偶然发现了一段代码,我对 java 的理解无法解释。我已经创建了相同类型结构的这个小版本:

public class StaticMethodClass {
static void IDK(Integer i, String somethingElse) {
System.out.println("It has been done");
}

public static void main(String... whatever) {
Action.ITEM.doStuff();
}
}

interface Func {
void exec(Integer i, String somethingElse);
}

enum Action {
ITEM(StaticMethodClass::IDK);

private Func f;

Action(Func f){
this.f = f;
}

void doStuff() {
this.f.exec(1, "huh");
}
}

我无法理解 Action.ITEM 构造方式的部分,因为它应该得到一个实现 Func 接口(interface)的类。相反,它传递了一个方法,该方法以某种方式隐式转换。

我的问题是它是如何工作的,以及这里适用什么规则。

最佳答案

这是一个相对较新的构造,称为 method reference .直到 Java 8 才可用。

I can't wrap my head around it the way Action.ITEM is constructed, as it should get a class implementing the Func interface.

方法引用提供了创建此类实现的捷径:而不是您编写

ITEM((i, e) -> StaticMethodClass.IDK(i, e));

只要 IDK 方法的签名与 Func 的签名完全匹配,编译器就会通过“快捷方式”语法为您计算出来exec 方法。

注意:上面的Lambda版本本身就是

的快捷方式
ITEM(new Func() {
@Override public exec(Integer i, String somethingElse) {
StaticMethodClass.IDK(i, somethingElse);
}
});

所以方法引用是捷径的捷径。

关于java - 奇怪的构造,java将静态方法转换为类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44800718/

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