Java 在android中查找视图的最终变量
为什么绝大多数android示例在findViewById(id)等方法中将返回变量声明为final?例如:Java 在android中查找视图的最终变量,java,android,Java,Android,为什么绝大多数android示例在findViewById(id)等方法中将返回变量声明为final?例如: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_enc_disp); final ListView listViewEncDisp = (
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_enc_disp);
final ListView listViewEncDisp = (ListView) findViewById(R.id.listViewEncDisp);
listViewEncDisp.setOnItemClickListener(this);
}
我知道最后一个变量不能再赋值了,但是我不明白你为什么需要这个好习惯。
提前感谢在所有变量中盲目添加
final
,这不是一个好习惯。尽可能将字段标记为最终字段是普遍接受的做法。使参数和变量始终是最终的更加主观。我个人避免使用它,因为它只会增加混乱。还要注意的是,将变量设置为final不会对运行时产生影响,在大多数情况下,它纯粹是一个编译时约束。如果您不想更改对象,应该将其声明为final
,避免编译时出现随机错误是一个很好的做法
例如,您可以尝试在代码中的其他位置分配另一个值,只是因为您忘记了以前这样做过,然后您可以花费数分钟,有时是数小时来尝试查找错误。我不明白无意中重新分配变量会如何导致“编译时错误”@SteveKuo
final int x=7;x=8代码>如果第二个赋值是无意的,则不会编译。因此,您可以在编译时而不是稍后的测试中避免该错误。例如,您创建EditText并将其分配给R.id.edit_text1,然后您的同事分配EditText R.id.edit_text2,因为他忘记了您以前做过这件事,仅此而已,您不能再像以前那样使用EditText。“还要注意,将变量设置为final不会对运行时产生影响”,相反的论点可能是,如果您不将参数设置为final,并使用in方法将对象分配给参数变量,更改将不会反映在原始对象上,并且新开发人员经常会遇到这种情况(我同意您的“更主观的观点”)“答案以及不想引发其他讨论,但被认为是有效的反证。”与