#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
}
Итак, я думаю, что ответом будет решительное «ДА»! Оба абсолютно ничего не делают.