2017-08-30 1 views
2

Peut-être que cette question est la réponse à la official doc, mais je ne le vois pas ...Comment placer une extension Kotlin dans un fichier de classe?

Swift nous sommes habitués à écrire quelque chose comme

class Jazz { 
... 
} 

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

et placez cet extrait de code entier dans un seul fichier, disons Jazz.swift.

Nous ne semblons pas être en mesure de faire la chose correspondante dans Kotlin? Je trouve toujours mon écriture personnelle, par exemple un Jazz.kt et un JazzExtensions.kt, ce qui n'est pas toujours la manière la plus claire de structurer le code.

Toute contribution à ce sujet est appréciée.

+1

Est-ce que le code swift n'est pas équivalent à placer 'class Jazz' et' fun Jazz.swing() {} 'dans le même fichier Kotlin? – BakaWaii

+0

Pourquoi voudriez-vous utiliser une extension et ne pas simplement ajouter la fonction comme une ordinaire dans la classe? – s1m0nw1

+0

@BakaWaii Oui, apparemment c'est :). Je jure que j'ai déjà essayé ça sans aucune chance: P. – Algar

Répondre

2

Vous pouvez placer la fonction d'extension à l'intérieur ou à l'extérieur de la classe:

Extérieur:

class Jazz { ... } 

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

intérieur (dans le 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

Merci! Il me manque toujours un mot-clé 'extension'. Peut-être dans le futur brillant de Kotlin. – Algar

1

Ce n'est pas très différent de Swift:

class Jazz { 
    val a = "Jazz" 
} 

fun Jazz.swing() = a 

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

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

Hahaha, j'aurais pu jurer que j'ai essayé ça ... Putain, ça a vite été embarrassant :). Merci pour la réponse, mais j'ai accepté @ guenhter depuis que c'était plus détaillé. – Algar

+0

Et il était le premier aussi :) –