2017-06-10 38 views
1

比方說,我們有以下的擴展功能:從Kotlin的另一個類訪問靜態擴展函數?

class Helper { 
    companion object { 
    fun Int.plus(value: String) = Integer.valueOf(value).plus(this) 
    } 

}

你怎麼能在Helper類訪問plus擴展功能在另一個類。有沒有一種方法,我們可以例如做這樣的事情:

class OtherClass { 
    fun someMethod() { 
    val eight = 7.Helper.Companion.plus("1") 
    } 

}

回答

1

的擴展聲明如下是一個member extension function,僅將成爲Helper類中可見。如果您需要在該課程之外訪問它,請將其放在更廣的範圍內,例如,使其成爲頂級功能。或者,如果您想將它保留在一個類中,您可以使其成爲一個帶有兩個參數的常規函數​​。


作爲一個額外的提示,你可以,如果你想與+符號使用它標誌着這個功能的operator

operator fun Int.plus(value: String) = Integer.valueOf(value) + this 

val x = 2 + "25" 
+0

感謝您花時間回答這個問題 – user2491598

3

在您的例子Int.plus(value: String)Helper.Companion對象的成員函數(它是伴侶對象還是它在另一個類中並不重要)。這種情況在文檔的Declaring Extensions as Members部分進行了描述。

總之,要訪問一個函數接收機(Int類型的擴展接收器和Helper.Companion類型的調度接收器),你必須具有他們都在範圍。

with(Helper.Companion) { 
    239.plus("") 
} 

with(Helper.Companion) { 
    with(239) { 
     plus("") 
    } 
} 

P.S.:

這可以以多種方式來實現將擴展函數放入伴隨對象中是非常不規則的,而不是習慣用法。我很難想象爲什麼你會需要這個。

+0

非常感謝您的回答:) – user2491598