myAdapter为什么对onDataChange范围可见?其他变量不可见。我对何时在onDataChange中可见以及何时不可见感到困惑:

private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private ArrayList<User> myDataset;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
   myDataset = new ArrayList<User>();
    mAdapter = new MyAdapter(myDataset);

 ValueEventListener listener= new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
            //doing stuff here, such as updating the data set


            mAdapter.notifyDataSetChanged();//<--how is it visible here? I thought its out of the async listener scope?

 }


对于某些变量,我知道它不在范围内,我需要声明它们为final,并且此mAdapter甚至myDataset都可见,没有问题

最佳答案

如果在onCreateView中声明的局部变量声明为final,则只能在内部类的onDataChange中访问。

包含类的成员字段在您的内部类中自动可见,因此在其onDataChange方法中也自动可见。这样做的原因是编译器隐式定义了引用外部对象的final变量。

10-08 01:52