我可以在委托中推断出属性的类型吗?

Kev*_*tel 2 generics android delegates android-layout kotlin

我有这个代码.它将findViewById与代表.

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
}
Run Code Online (Sandbox Code Playgroud)

有没有办法删除view<ImageView>view懒惰块中的东西?我可以在函数中获取或推断属性的类型view()吗?

mie*_*sol 5

你可以有

val backgroundImage by lazy { view<ImageView>(R.id.imageView) }
Run Code Online (Sandbox Code Playgroud)

要么

val backgroundImage by lazy<ImageView> { view(R.id.imageView) }
Run Code Online (Sandbox Code Playgroud)

请注意,在这两种情况下,backgroundImage从右侧表达式类型推断出类型.