2017-04-07 2 views
0

Zum Beispiel lassen Sie uns sagen, dass ich eine Funktion aufrufen wie folgt aus:Kann ich einen anderen Rückgabetyp in Kotlin haben?

val call1: String = myFunction() 

oder

val call2: Int = myFunction() 

Wie kann ich meine Funktion entscheiden lassen, was in fonction des Anrufs zurückzukehren und nicht die Funktion selbst? Was sollte der Rückgabetyp sein? Irgendein ? Einheit? ?

Ich weiß nicht, ob es so hier klar ist das Beispiel auf das, was ich arbeite:

Ich habe diese Zeile:

var query: Query = FirebaseDatabase.getInstance().reference.child(path) 

Hier werden wir eine Abfrage bekommen, aber wenn ich tun dass:

var query = FirebaseDatabase.getInstance().reference.child(path) 

ich ein databaseReference

ich versuche

Also entweder eine Abfrage oder eine bekommen zu bekommen databaseReference entsprechend dem Aufruf der Funktion und nicht der Funktion.

+2

databaseReference ist eine Abfrage - Sie sind nicht entscheiden anything- seine nur databaseReference gegossen werden kann, um Abfrage, die Sie in dem ersten Aufruf zu tun – X3Btel

Antwort

0

Sie können es fälschen. In Java ist es bereits möglich, eine Methode wie folgt zu schreiben:.

public <T> T foo(Class<T> clazz) { /* Do stuff */ } 

, dass verschiedene Dinge basierend auf der Klasse kehrt in geben

Sie wollen wahrscheinlich noch so etwas haben, die schwer zu tun Heben, aber Sie können die Schnittstelle, um es ein bisschen schöner machen:

interface Interface {} 
class Clazz() : Interface {} 
class Clbzz() : Interface {} 
fun <T: Interface> foo(clazz: KClass<T>) : T { /* return a T */ } 
inline fun <reified T: Interface> foo() : T { return foo(T::class) } 

val a = foo<Clazz>() 
val b : Clbzz = foo() 
Verwandte Themen