繁体   English   中英

Android Final vs Private textviews

[英]Android Final vs Private textviews

简单也许是愚蠢的问题。 我有一个登录活动,它启动另一个活动,这里是代码:

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();
            }
        }
    });
    }
}

我的问题是关于textviews。 Eclipse基本上说我必须让它们最终才能在按钮的onClick事件中使用它们。 NP所以我做到了这一点并且有效。

问题是将@Override作为私有vs在OnCreate内置于最终之间有什么区别?

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

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

当你将它们“放在LoginActivity之上”时,你将它们作为LoginActivity类的成员变量。 因此,匿名类可以访问它们。

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

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

当您将TextView字段(或任何字段)声明为public时,可以由任何其他类直接访问它,我不相信您的意图; 没有理由将TextView变量公开。
如果将其设置为私有,则可以保证其值不会在另一个类中被覆盖,这是最终关键字设计为首先执行的操作。 因此,只需将其设置为私有,您就不必担心Eclipse会纠正您。
因此,总结一下:使字段private / final确保不能从另一个类重写该值,这是一个很好的设计。

希望这漫无边际的帮助。 如果不这样做,我会很高兴澄清一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM