【问题标题】:In Kotlin, how can you tell if ":" means extends or returns?在 Kotlin 中,如何判断“:”是扩展还是返回?
【发布时间】:2019-04-26 18:36:42
【问题描述】:

Java 在这方面更明确一些,但是在学习 Kotlin 时,是否有经验法则可以知道 : 何时表示它正在返回某些东西,而不是它何时扩展一个类?

例子:

data class SlothGeneric(
    val slothName: String,
    val isTwoFingered: Boolean,
    var slothWeight: Int
): Mammal(slothName)

我们如何知道这个类 SlothGeneric 是返回一个 Mammal 类,还是扩展它?

【问题讨论】:

  • 表示“类型的”,如“哺乳动物类型的数据类SlothGeneric”、“Double类型的函数sin”、“SlothGeneric类型的值树懒”等。

标签: generics kotlin


【解决方案1】:

类不能返回任何东西(只有它们的函数可以),所以当你在类定义上看到冒号 : 时,它的意思是 extends / implements

另一方面,函数不能扩展或实现任何东西,但可以有返回类型,因此冒号: 表示函数定义中的返回类型。

【讨论】:

  • 一目了然,在查看类时,括号“()”表示扩展(继承),没有括号表示实现(接口)。函数的返回类型永远不会有括号。
  • 这个答案应该被编辑为在“分号”的两个实例中读取“冒号”。它不会让我编辑答案。
  • @KevinWorth 谢谢,完成。
【解决方案2】:

如果代码遵循默认的 Kotlin 编码风格,扩展类型和指定声明类型之间的区别可以通过冒号周围的空格来说明:

  • 如果: 将声明(属性或函数)与其类型分开,则: 之前不应有空格

    fun Mammal.giveBirth(): Mammal
    
  • 如果: 将一个类型与其超类型分开,: 之前应该有一个空格
    class Sloth : Mammal
    

https://kotlinlang.org/docs/reference/coding-conventions.html#colon

【讨论】:

    猜你喜欢
    • 2013-05-18
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 2014-03-29
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多