空块和Unit有什么区别

Sla*_*neR 1 kotlin

空块和返回Unit有什么区别吗?

例如,我们应该让方法的空块不执行任何操作

void ThisMethodDoesNothing() { }
Run Code Online (Sandbox Code Playgroud)


在 kotlin 中,我们可以编写上面的代码,但是这样

fun ThisMethodDoesNothing() = Unit
Run Code Online (Sandbox Code Playgroud)


如果有重复请告知,谢谢。

Ste*_*eve 5

我猜想这两个人可能做了同样的事情,但我无法确定。我真的很想知道。因此,我创建了一个类来放入其中的每一个(因为 Java 必须有一个围绕任何代码的类),更改了 Kotlin 版本,以便方法上的属性相同,这给了我这个:

a.java

public class a {
    public final void ThisMethodDoesNothing() { }
}
Run Code Online (Sandbox Code Playgroud)

b.kt

class b {
    fun ThisMethodDoesNothing() = Unit
}
Run Code Online (Sandbox Code Playgroud)

然后我编译了每一个,然后用 反编译它们javad -c,得到:

> javap -c com.inlet.ifserver.a
Compiled from "a.java"
public class com.inlet.ifserver.a {
  public com.inlet.ifserver.a();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public final void ThisMethodDoesNothing();
    Code:
       0: return
}

> javap -c com.inlet.ifserver.b
Compiled from "b.kt"
public final class com.inlet.ifserver.b {
  public final void ThisMethodDoesNothing();
    Code:
       0: return

  public com.inlet.ifserver.b();
    Code:
       0: aload_0
       1: invokespecial #11                 // Method java/lang/Object."<init>":()V
       4: return
}
Run Code Online (Sandbox Code Playgroud)

所以我认为答案是肯定的!两者都完全没有做任何事情。