Kotlin空课的目的是什么?

我正在通过Kotlin 参考文件 ,然后我看到了这一点。

类声明由类名,类头(指定其types参数,主构造函数等)以及由花括号包围的类正文组成。 标题和正文都是可选的; 如果class级没有身体,可以省略花括号。

 class Empty 

现在我想知道什么是这样的类声明没有标题和正文的用法

答:示范目的

它仍然是Anytypes,因此自动具有某些方法 。 我认为在大多数情况下,这是没有意义的,但在文档情况下,它被用来显示类的最简单的可能定义。

Java的等价物将是:

 public final class Empty { } 

空类可以用来表示与其他类一起的状态,尤其是在密封类的一部分时。 例如。

 sealed class MyState { class Empty : MyState() class Loading : MyState() data class Content(content: String) : MyState() data class Error(error: Throwable) : MyState() } 

通过这种方式,您可以将它们想象为更具弹性的Java枚举条目。

从实际的程序员日常的角度来看,空class确实没什么意义。 然而,有这种行为是可取的。

有些情况下,我们要确保我们要定义一个类,同时我们要确保这个类的实例永远不会被创建(从这个类创建的types称为empty typeuninhabited type ) 。

Kotlin的完美例子是Nothing class声明的类声明头和body(注意它也有private构造函数) https://github.com/JetBrains/kotlin/blob/master/core/builtins/native/kotlin/ Nothing.kt

在Kotlin语言中Nothing用法。 其中一个是不会返回值的函数(不要将此与函数返回的Unit实际返回Unittypes的值混淆)。 一个典型的例子是用于测试的assertFail方法或者退出当前进程的方法。 两种方法都不会真正返回任何值,但我们需要明确地告诉它使用特殊types( Nothing )的编译器。

 fun assertFail():Nothing { throw Exception() } 

在typesFunction<*, String>可以投影到Function开始投影中,也不能使用Function

空类的另一个用法是types标记或占位符:

 class DatabaseColumnName class DatabaseTableName addItem(DatabaseColumnName.javaClass, "Age") addItem(DatabaseTableName.javaClass, "Person") ... getItemsByType(DatabaseTableName.javaClass) 

有些语言使用空类进行元编程,尽管我没有亲自探讨这个部分: C ++中空类的优点

作为最终结果没有多大意义。 然而,在积极的开发中,在设计阶段作为某种可能在未来扩展的占位符是有用的。 这种简洁的语法允许您根据需要快速定义这种新types。 就像是:

 class Person ( val FirstName: String, val LastName: String, // TODO val Address: Address ) class Address 

我认为这是在文档中特别提到的主要原因是为了演示,一般的语言语法可以是简洁的,而不是它是专门为常用用途创建的。