我刚刚生成了一个Master/Detail Flow
项目,但发现了一些奇怪的地方:在DriverListActivity.java
中,名为ViewHolder
的子类具有final
属性。由于ViewHolder
中的数据可能会被替换,
为什么将属性设置为final
?
public class ViewHolder extends RecyclerView.ViewHolder {
public final View mView; //???????
public final TextView mIdView; //???????
public final TextView mContentView; //???????
public DummyContent.DummyItem mItem;
//CONSTRUCTOR
public ViewHolder(View view) {
super(view);
mView = view;
mIdView = (TextView) view.findViewById(R.id.id);
mContentView = (TextView) view.findViewById(R.id.content);
}
@Override
public String toString() {
return super.toString() + " '" + mContentView.getText() + "'";
}
}
最佳答案
最终并不意味着对象不能被突变。 Final表示引用本身不能被替换。您仍然可以在最终引用上调用mIdView.setText()。
就像在C语言中一样。这里有一个指针(一个引用)和一个值。 Final表示指针不可更改,而不是其指向的值。而且一旦创建,ViewHolder就不会更改其内部视图的值-这就是我们使用ViewHolder模式的原因-这些引用是恒定的。