如何设置外部class的变量

How to set outer class's variable

public class MySurface extends Surface View implements SurfaceHoler.Callback {
SurfaceHoler holder;
class MyThread extends Thread {
    public MyThread (SurfaceHolder holder, Context context){
        this.holder = holder;
        }
    }
}

我想将属于“MySurface”的“holder”设置为内部构造函数 holder,但这不起作用。我不想更改变量的名称。

由于 MyThread 嵌套在 MySurface 中( holder 参数隐藏 holder 实例 属性, 见下文)你必须限定封闭的 class:

MySurface.this.holder = holder;

里面的classthis是指MyThread.

或者,您可以通过重命名参数来完全删除 this.

public class MySurface extends Surface View implements SurfaceHoler.Callback {
  SurfaceHoler holder;

  class MyThread extends Thread {
    public MyThread (SurfaceHolder surfaceHolder, Context context){
      holder = surfaceHolder;
    }
  }
}

此外,您可能会发现 Oracle 嵌套 类 教程的 "Shadowing" section 很有趣。