2017-06-22 71 views
-1

我想为自定义类使用变量和方法的扩展。 我想下面的代码,但得到错误Kotlin中的扩展

本地扩展属性是不允许

val Double.km: Double get() = this * 1000 
val Double.m: Double get() = this 
val Double.cm: Double get() = this/100 
val Double.mm: Double get() = this/1000 
val Double.ft: Double get() = this/3.28084 

val oneInch = 25.4.mm 
println("One inch is $oneInch meters") 
// prints "One inch is 0.0254 meters" 
val threeFeet = 3.0.ft 
println("Three feet is $threeFeet meters") 
// prints "Three feet is 0.914399970739201 meters" 

如何使用扩展?我们可以在界面中使用扩展吗?

回答

3

您必须将这些声明从函数体移到类体。像错误状态一样,不允许在本地定义扩展属性,而本地扩展方法可以。

所以你的情况,你可以这样做:

class MainClass { 
    val Double.km: Double get() = this * 1000 
    val Double.m: Double get() = this 
    val Double.cm: Double get() = this/100 
    val Double.mm: Double get() = this/1000 
    val Double.ft: Double get() = this/3.28084 

    fun run() { 
     val oneInch = 25.4.mm 
     println("One inch is $oneInch meters") 
    } 
} 

您可以从MainClass中使用的扩展性能,而在户外使用是不可能的。

+0

可以添加示例以使用本地类的扩展名 –

+0

可能是因为本地扩展属性不被允许(会导致问题,会是什么)? – Jesper

+1

@Jesper我猜这些是不可能的。尽管我在网上找不到任何文档/原因。 – tynn