2016-07-31 7 views
1

Ich habe gelesen über properties in Kotlin, einschließlich benutzerdefinierte Getter und Setter.Übergeben von Parametern zu einem benutzerdefinierten Getter in Kotlin

Ich frage mich jedoch, ob es möglich ist, einen benutzerdefinierten Getter mit zusätzlichen Parametern zu erstellen.

Betrachten wir zum Beispiel die folgende Methode in Java:

public String getDisplayedValue(Context context) { 
    if (PrefUtils.useImperialUnits(context)) { 
     // return stuff 
    } else { 
     // return other stuff 
    } 
} 

Beachten Sie, dass die statische Methode in PrefUtilsContext als Parameter haben muss, so Entfernen dies keine Option ist.

ich es so in Kotlin schreiben möchte:

val displayedValue: String 
    get(context: Context) { 
     return if (PrefUtils.useImperialUnits(context)) { 
      // stuff 
     } else { 
      // other stuff 
     } 
    } 

Aber meine IDE Highlights all dies in rot.

Ich bin mir bewusst, dass ich eine Funktion in meiner Klasse erstellen kann, um den angezeigten Wert zu erhalten, aber das würde bedeuten, dass ich .getDisplayedValue(Context) in Kotlin auch verwenden müsste statt auf die Eigenschaft nach Name wie in .displayedValue verweisen.

Gibt es eine Möglichkeit, einen benutzerdefinierten Getter wie diesen zu erstellen?

EDIT: Wenn nicht, wäre es am besten, eine Funktion dafür zu schreiben oder Context in die Parameter des Klassenkonstruktors zu übergeben?

Antwort

3

Soweit ich weiß, kann Eigenschaft Getter Parameter nicht haben. Schreiben Sie stattdessen eine Funktion.

+0

Wäre es schlechte Praxis passieren 'Context' in die Parameter des Klasse Konstruktor für die benutzerdefinierten Getter zu benutzen? –

+0

Es ist nicht der einfachste Weg, aber wenn Sie die Syntax einer Eigenschaft benötigen, dann tun Sie es – voddan

1

Sie können zum Beispiel so tun:

val displayedValue: String by lazy { 
    val newString = context.getString(R.string.someString) 
    newString 
} 
Verwandte Themen