2016-07-26 11 views
2

Ich habe diesen Code. Es wird findViewById mit einem Delegierten.Kann ich den Typ einer Eigenschaft im Delegaten ableiten?

val backgroundImage: ImageView by lazy { view<ImageView>(R.id.item_component_section_background) } 

fun <T: View> view(id : Int) : T { 
    val view : View = findViewById(id) ?: throw IllegalArgumentException("Given ID could not be found in current layout!") 

    @Suppress("UNCHECKED_CAST") 
    return view as T 
} 

Gibt es eine Möglichkeit, die view<ImageView> für so etwas wie view im lazy-Block zu entfernen? Kann ich den Typ der Eigenschaft in der Funktion view() ermitteln oder ableiten?

Antwort

5

können Sie

val backgroundImage by lazy { view<ImageView>(R.id.imageView) } 

oder

val backgroundImage by lazy<ImageView> { view(R.id.imageView) } 

Hinweis haben, dass die Art von backgroundImage in beiden Fällen von der rechten Seite Ausdrucksart geschlossen wird.

+0

Es ist nicht, was ich denke, aber es ist das Ergebnis, das ich möchte! So muss ich den Typ nicht zweimal schreiben. –