Kotlin空课的目的是什么?
我正在通过Kotlin
参考文件 ,然后我看到了这一点。
类声明由类名,类头(指定其types参数,主构造函数等)以及由花括号包围的类正文组成。 标题和正文都是可选的; 如果class级没有身体,可以省略花括号。
class Empty
现在我想知道什么是这样的类声明没有标题和正文的用法
答:示范目的
它仍然是Any
types,因此自动具有某些方法 。 我认为在大多数情况下,这是没有意义的,但在文档情况下,它被用来显示类的最简单的可能定义。
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 type
或uninhabited type
) 。
Kotlin的完美例子是Nothing
class声明的类声明头和body(注意它也有private构造函数) https://github.com/JetBrains/kotlin/blob/master/core/builtins/native/kotlin/ Nothing.kt
在Kotlin语言中Nothing
用法。 其中一个是不会返回值的函数(不要将此与函数返回的Unit
实际返回Unit
types的值混淆)。 一个典型的例子是用于测试的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
我认为这是在文档中特别提到的主要原因是为了演示,一般的语言语法可以是简洁的,而不是它是专门为常用用途创建的。