gpt4 book ai didi

java - 快速 Java 匿名函数/类问题

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

我知道匿名函数在 JS 中是如何工作的,并且在 Java 中对它的某些部分感到有些困惑。
所以下面我有一个匿名类(我只是使用 Thread 类作为我所看到的示例),我在其中覆盖 run() 函数,然后在该类上调用 .start() 。

new Thread() {
@Override
public void run() {
System.out.println("Hello from the anonymous class thread");
}
}.start();
所以这行得通,但 IntelliJ 想让我把它改写成这样:
new Thread(() -> System.out.println("Hello from the anonymous class thread")).start();
我得到了这种语法的大部分内容,但对于如何覆盖 run() 函数有点困惑。据我了解,没有参数被传递给 Thread 类(所以我假设没有任何参数传递给构造函数)。现在我感到困惑的地方就在这里。它没有在任何地方声明它正在覆盖 run() 函数。这是 Thread 类的特例还是我遗漏了什么?
希望我能清楚地解释这一点,并提前感谢!

最佳答案

IntelliJ 向您建议的语法不是您原始代码的“倾斜”翻译,实际上并没有覆盖 Thread.run就像您的原始代码一样。
您的原始代码创建了 Thread 的匿名子类。与 run被覆盖,而 IntelliJ 建议的语法调用 this constructorThread接受 Runnable . lambda 表达式表示 Runnable .如果我们将 lambda 表达式“扩展”为匿名类,我们实际上会这样做:

new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello from the anonymous class thread");
}
}).start();
所以我们正在创建 Runnable 的匿名实现。 ,并实现 Runnable.run反而。

It doesn't state anywhere that it is overriding the run() function.


没错,但是 runRunnable 中唯一的抽象方法接口(interface),因此 Java 能够确定您正在覆盖该方法。

关于java - 快速 Java 匿名函数/类问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62826586/

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