2016-03-15 11 views
11

Per esempio io ho classe Java (da libreria esterna):È possibile aggiungere la funzione di estensione "statica" per la classe Java?

class A {} // This is Java class 

voglio aggiungere funzioni di estensione scritti su Kotlin e chiamarlo come:

A.foo() // This is call of extension function `foo` from Kotlin code 

quanto ho capito, adesso è impossibile da fare in Kotlin perché supporta le funzioni di estensione "statiche" solo per KClass-es with companion object. Destra?

Sembra che nulla impedisca di implementare tale funzionalità in Kotlin in seguito. Destra?

+0

Perché ne hai bisogno? Si potrebbe semplicemente definire una funzione regolare in un pacchetto per ottenere lo stesso effetto, tranne che non si deve usare un nome di classe con sintassi del punto per chiamarlo. Se ti aspetti di usare il reflection per trovare il metodo statico in qualche classe, questa è una storia diversa ... –

+0

Voglio solo usare la sintassi 'A.foo()' invece di 'foo (A)' perché Kotlin promuove tale sintassi per estendere la funzionalità delle classi (vedere il primo paragrafo [qui] (https://kotlinlang.org/docs/reference/extensions.html#extensions)). –

+2

A destra, le funzioni di estensione e le proprietà sono per * istanze * di classi. Non hai un'istanza qui, solo una chiamata di funzione. –

risposta

22

Hai ragione. In Kotlin 1.0, è possibile definire le funzioni di estensione su un oggetto complementare di una classe Kotlin e tali funzioni possono essere chiamate utilizzando la sintassi A.foo(). Il supporto per la definizione delle funzioni di estensione statica sulle classi Java è una funzione possibile per le versioni future di Kotlin, ma non è sulla roadmap di Kotlin 1.1 in questo momento.

+1

Ciao, ci sono novità? – elect

+0

@elect Questo non è ancora sulla roadmap per 1.1 o 1.2. – yole

+1

Questo dovrebbe essere! Lo usiamo sempre in Swift e tende ad essere utile in diversi scenari (es: Date.fromJSON (...)). – Marchy

Problemi correlati