java - Android Final 与私有(private) TextView

标签 java android final

简单但可能是愚蠢的问题。我有一个启动另一个 Activity 的登录 Activity ,代码如下:

public class LoginActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);
    ActionBar actionBar = getActionBar();
    actionBar.hide();

    Button btnLogin = (Button) findViewById(R.id.btnLogin);
    final TextView tvUsername = (TextView) findViewById(R.id.tvUsername);
    final TextView tvPassword = (TextView) findViewById(R.id.tvPassword);

    btnLogin.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (tvUsername.getText().toString().length()<1) {
                Toast msg = Toast.makeText(LoginActivity.this, "Enter a Username", Toast.LENGTH_LONG);
                msg.setGravity(Gravity.TOP|Gravity.LEFT, 0, 70);
                msg.show();
                tvUsername.requestFocus();
            } else if (tvPassword.getText().toString().length()<1) {
                Toast msg = Toast.makeText(LoginActivity.this, "Enter a Password", Toast.LENGTH_LONG);
                msg.setGravity(Gravity.TOP|Gravity.LEFT, 0, 200);
                msg.show();
                tvPassword.requestFocus();
            } else {
                startActivity(new Intent(LoginActivity.this,CrewScheduleActivity.class));
                finish();
            }
        }
    });
    }
}

我的问题是关于 TextView 。 Eclipse 基本上说我必须将它们设为最终状态才能在按钮的 onClick 事件中使用它们。 NP 所以我这样做了并且成功了。

问题是将它们放在 @Override 之上作为私有(private)与在 OnCreate 内部作为最终有什么区别?

最佳答案

这与 closure in Java 有关.基本上,当您使用匿名类时,其中使用的值(不是对象本身)会被复制到该类中以供使用。因此,在类中返回或修改这些变量没有意义,因此它们必须是 final

但是,如果变量是 包含 匿名类的类的一部分,那就不同了。基本上,您的内部类具有对 LoginActivity 对象的引用(如 LoginActivity.this),并且可以使用和修改其成员和方法。

当您将它们放在“@Override 之上”时,您就是在使它们成为 LoginActivity 类的成员变量。因此,它们可以被匿名类访问。

简而言之,不同之处在于:final 变量是方法的局部变量,并被复制到匿名类;成员变量是包含类的本地变量,由匿名类修改。

如果以后要重用匿名类中的数据,请使用成员变量。如果您只在 onCreate() 和匿名类中需要它,那么 final 变量就足够了。

关于java - Android Final 与私有(private) TextView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13537916/

相关文章:

java - 需要澄清 Java 中监听器匿名类的概念

java - 'mix class and interfaces in the same package' 是不好的做法吗?

java - 如何检查 Android 中可用的互联网?

java - 模糊 TextView 的背景 - IllegalArgumentException 宽度和高度必须 > 0

java - Hadoop Mapreduce:Reducer的值是相反的顺序

android - 带有 TranslucentNavigation 的 Snackbar 和 CollapsingToolbarLayout

Android SQL 没有这样的表?

c - 为什么这是一个无限循环?

java - 抽象类中的最终变量

java - 在 Java 中,对象访问可以用该对象的最终字段访问重新排序吗?