2017-08-30 4 views
2

Vielleicht ist diese Frage im official doc beantwortet, aber ich sehe es nicht ...Wie platziere ich eine Kotlin-Erweiterung in einer Klassendatei?

In Swift sind wir so etwas wie

class Jazz { 
... 
} 

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

und legen die ganze Code-Schnipsel in einem einzigen schreiben verwendet Datei, sagen Jazz.swift.

Wir scheinen nicht in der Lage zu sein, die entsprechende Sache in Kotlin zu tun? Ich finde immer, dass ich selbst schreibe, z. eine Jazz.kt und eine JazzExtensions.kt, die einfach nicht immer die klarste Art der Strukturierung des Codes ist.

Irgendein Input auf diesem wird geschätzt.

+1

Ist der swift-Code nicht gleichbedeutend mit 'class Jazz' und' fun Jazz.swing() {} 'innerhalb derselben Kotlin-Datei? – BakaWaii

+0

Warum würden Sie eine Erweiterung verwenden und die Funktion nicht einfach als eine normale in der Klasse hinzufügen? – s1m0nw1

+0

@BakaWaii Ja, anscheinend ist es :). Ich schwöre, dass ich das vorher ohne Glück versucht habe: P. – Algar

Antwort

2

können Sie legen die Erweiterungsfunktion innerhalb oder außerhalb der Klasse:

Außen:

class Jazz { ... } 

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

Innere (im 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

Danke! Ich vermisse jedoch immer noch ein 'extension'-Schlüsselwort. Vielleicht in der hellen Kotlin-Zukunft. – Algar

1

Es ist nicht sehr verschieden von Swift:

class Jazz { 
    val a = "Jazz" 
} 

fun Jazz.swing() = a 

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

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

Hahaha, ich hätte schwören können, dass ich das versucht habe ... Verdammt, das wurde schnell peinlich :). Danke für die Antwort, aber ich habe @ guenhters akzeptiert, da das detaillierter war. – Algar

+0

Und er war zuerst auch :) –

Verwandte Themen