Есть ли разница между пустым блоком и единицей

#kotlin

#kotlin

Вопрос:

Есть ли какая-либо разница между пустым блоком и возвращаемой единицей?

например, мы должны заставить пустой блок метода ничего не делать

 void ThisMethodDoesNothing() { }
  

В kotlin мы можем написать приведенный выше код, но таким образом

 fun ThisMethodDoesNothing() = Unit
  

Пожалуйста, дайте мне знать, если это дублируется, спасибо.

Ответ №1:

Я полагал, что эти два, вероятно, делали одно и то же, но у меня не было способа убедиться. Я действительно хотел знать. Итак, я создал класс для размещения каждого из них (поскольку Java должна иметь класс для любого кода), изменил версию Kotlin, чтобы атрибуты метода были одинаковыми, и это дало мне это:

a.java

 public class a {
    public final void ThisMethodDoesNothing() { }
}
  

b.kt

 class b {
    fun ThisMethodDoesNothing() = Unit
}
  

Затем я скомпилировал каждый из них, а затем декомпилировал их с помощью 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
}
  

Итак, я думаю, что ответом будет решительное «ДА»! Оба абсолютно ничего не делают.