我刚刚生成了一个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模式的原因-这些引用是恒定的。

09-10 07:24
查看更多