[英]How to translate this Android Kotlin code to Java code
class MainAdapter : RecyclerView.Adapter<MainAdapter.ViewHolder>() {
var list: List<Int> = arrayListOf()
var tracker: SelectionTracker<Long>? = null
init {
setHasStableIds(true)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val number = list[position]
tracker?.let {
holder.bind(number, it.isSelected(position.toLong()))
}
}
我想了解这个例子。 tracker?.let
翻译成什么? 还有 Java 中init
的等价物是什么?
init
根据文档 - init 相当于 java 中的构造函数。 在这里我们可以初始化一个变量。
let
根据文档 - Kotlin let是一个作用域函数,其中在表达式内部声明的变量不能在外部使用。
tracker?.let {
holder.bind(number, it.isSelected(position.toLong()))
}
这是跟踪器的副本。更改它不会影响跟踪器变量。
Java 代码中的 MainAdapter 等价物是这样的:
class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> {
List<Integer> list = new ArrayList<>();
SelectionTracker<Long> tracker;
public MainAdapter() {
setHasStableIds(true);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
int number = list.get(position);
if (tracker != null) {
holder.bind(number, tracker.isSelected(position.toLong()));
}
}
}
class M {
var age: Int = 0
}
fun main(){
val m = M()
m.let {
it.age = 11
}
println(m.age)
}
在输出“11”上方,所以“let”不会复制接收器,“it”只是指向接收器,它有副作用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.