如何在类文件中放置Kotlin扩展?

问题描述:

也许这个问题在official doc回答,但我没有看到它...如何在类文件中放置Kotlin扩展?

在斯威夫特我们习惯于写类似

class Jazz { 
... 
} 

extension Jazz { 
    func swing() { 
    ... 
    } 
} 

,并放置在一个整体的代码段文件,说Jazz.swift

我们似乎无法在Kotlin中做相应的事情?我总是发现自己的写作,例如一个Jazz.kt和一个JazzExtensions.kt,这并不总是构建代码的最清晰的方式。

对此有任何意见。

+1

是不是swift代码等同于将'class Jazz'和'fun Jazz.swing(){}'放在同一个Kotlin文件中? – BakaWaii

+0

为什么你会使用扩展名,而不是只将该函数作为类中的普通函数添加? – s1m0nw1

+0

@BakaWaii是的,显然它是:)。我发誓我以前曾尝试过,但没有运气:P。 – Algar

您可以将扩展功能类的内部或外部:

外:

class Jazz { ... } 

fun Jazz.bar() { 
    println("hello") 
} 

内(在companion object):

import YOUR_PACKAGE.Jazz.Companion.bar 

fun main(args: Array<String>) { 
    Jazz().bar() 
} 

class Jazz { 
    companion object { 
     fun Jazz.bar() { 
      println("hello") 
     } 
    } 
} 
+0

谢谢!尽管如此,我仍然缺少一个'extension'关键字。也许在明亮的Kotlin未来。 – Algar

这不是从斯威夫特很大的不同

class Jazz { 
    val a = "Jazz" 
} 

fun Jazz.swing() = a 

//////////// 

fun main(args: Array<String>) { 
    print(Jazz().swing()) // >>> Jazz 
} 
+1

哈哈哈,我可以发誓我已经试过了......该死,这让尴尬很快:)。感谢您的回答,但我已经接受@ guenhter的,因为这是更详细的。 – Algar

+0

他也是第一个:) –