当我在谓词中返回一个函数时,编译器没有注册它并仍然抱怨
A'返回'具有块体的函数需要表达式
我找到的解决方案是在谓词之后抛出一个。
fun boo(): Int {
sth.apply {
return sthElse
}
throw Exception("Unkown View type")
}
我想知道是否有更优雅的方式。
p.s:实际的Android代码
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
LayoutInflater.from(parent?.context)
.inflate(R.layout.item_category_node, parent, false)
.apply {
return CategoryNodeViewHolder(this, this@CategoriesAdapter)
}
throw Exception("View type error")
}
答案 0 :(得分:1)
编辑:看到你的例子后:
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int)
= LayoutInflater.from(parent?.context)
.inflate(R.layout.item_category_node, parent, false)
.let {
CategoryNodeViewHolder(this, this@CategoriesAdapter)
}
答案 1 :(得分:1)
在这些情况下应使用'run'扩展功能。根据{{3}} 运行
调用指定的功能块并返回其结果。
我的代码现在看起来像这样
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
return LayoutInflater.from(parent?.context)
.inflate(R.layout.item_category_node, parent, false)
.run {
CategoryNodeViewHolder(this, this@CategoriesAdapter)
}
//throw Exception("Unkown View type")
}
答案 2 :(得分:0)
apply函数已经有一个被调用对象的return语句,请参阅https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/apply.html
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int) =
CategoryNodeViewHolder(
LayoutInflater.from(parent?.context).apply{
inflate(R.layout.item_category_node, parent, false)
}, this@CategoriesAdapter)
现在返回方法的正确对象类型,同时实例化layoutInflater,并在用于实例化CategoryNodeViewHolder之前应用CategoryNodeViewHolder所需的通胀。