Есть ли разница между пустым блоком и блоком - PullRequest
0 голосов
/ 28 марта 2019

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

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

void ThisMethodDoesNothing() { }


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

fun ThisMethodDoesNothing() = Unit


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

1 Ответ

3 голосов
/ 28 марта 2019

Я подумал, что оба, вероятно, сделали то же самое, но у меня не было никакой возможности быть уверенным.Я действительно хотел знать.Поэтому я создал класс, чтобы поместить каждый из них (поскольку 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
}

Так что я думаю, что ответ - ДА!Оба абсолютно ничего не делают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...