Vom praktischen Programmierer Tag zu Tag Perspektive leere Klasse macht in der Tat keinen viel Sinn. Es gibt jedoch Fälle, in denen dieses Verhalten wünschenswert ist.
Es gibt Szenarios, in denen wir sicherstellen wollen, dass wir eine Klasse definieren wollen und gleichzeitig sicherstellen wollen, dass eine Instanz dieser Klasse niemals erstellt wird (der Typ, der aus dieser Klasse erstellt wird, heißt empty type
oder uninhabited type
).
perfektes Beispiel hierfür ist Kotlin Nothing
Klasse mit nicht Klassendeklaration Header und Körper haben (beachten Sie, dass es auch privaten Konstruktor) https://github.com/JetBrains/kotlin/blob/master/core/builtins/native/kotlin/Nothing.kt
Es gibt nur wenige Verwendungen für Nothing
in Kotlin Sprache. Eine davon wäre eine Funktion, die keinen Wert zurückgibt (verwechseln Sie das nicht mit Unit
, wo die Funktion zurückgibt, gibt tatsächlich einen Wert vom Typ Unit
zurück). Ein typisches Beispiel ist eine assertFail
-Methode, die zum Testen verwendet wird, oder eine Methode, die den aktuellen Prozess beendet. Beide Methoden werden niemals tatsächlich irgendeinen Wert zurückliefern, aber wir müssen explizit sagen, dass es einem Compiler mit einem speziellen Typ (Nothing
) mitgeteilt wird.
fun assertFail():Nothing {
throw Exception()
}
Nichts kann auch mit Start Projektionen verwendet werden, bei denen Typ Function<*, String>
in den Projektionen zu Function<in Nothing, String>
Eine andere Nutzung für leere Klasse sein kann, ist Typ-Token oder Platzhalter:
class DatabaseColumnName
class DatabaseTableName
addItem(DatabaseColumnName.javaClass, "Age")
addItem(DatabaseTableName.javaClass, "Person")
...
getItemsByType(DatabaseTableName.javaClass)
Einige Sprachen sind benutze leere Klassen für Metaprogrammierung, obwohl ich diesen Teil nicht persönlich untersucht habe: Advantages of an empty class in C++
Kotlin Reddit AMA [ans] (https://www.reddit.com/r/Kotlin/comments/7hoytl/kotlin_team_ama_ask_us_anything/dqt0en5/) – imGs