【发布时间】:2021-11-25 05:38:35
【问题描述】:
除了我在网上找到的涉及最终变量和内部类的内容之外,我还想得到一些澄清。具体来说,我的问题是关于为什么全局变量可以在内部类中使用,而不是为什么某些变量需要是最终的。请让我知道您是否可以对我的推理进行澄清/更正。
在以下示例中,我创建了一个内部类,并且我相信在创建 View.OnClickListener 类型的匿名内部类时会复制“i”。创建内部类时,必须将变量设置为最终变量,以作为对用户的说明,而不是真正需要的东西。据我所知,这就像将变量传递给方法一样。这些变量是重复的,因为 Java 是按值传递的语言。该方法完成后,副本将丢失,并且不会保存对原始值的任何更改。让我们坚持使用 int 以保持此示例的简单性。
Button b;
int j = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b=findViewById(R.id.button);
int i = 0;
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
i++;
j++
}
});
}
强制 final 是为了保护程序员,因为 i 的值(在这个例子中)实际上永远不会改变?
是不是 j 不需要 final 修饰符,因为创建内部类时不会复制全局变量?这是因为它们已经存在于其中包含的所有类中,所以不会发生重复?
【问题讨论】:
标签: java android global-variables final anonymous-inner-class