变量在内部类中访问。需要宣布为最终

2022-08-31 07:56:35

我在 .onClick

下面是代码。

public class fieldsActivity extends Activity {

Button addSiteButton;
Button cancelButton;
Button signInButton;


/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // to create a custom title bar for activity window
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

    setContentView(R.layout.fields);
    // use custom layout title bar
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.topbar);

    Pager adapter = new Pager();
    ViewPager mPager = (ViewPager) findViewById(R.id.fieldspager);
    mPager.setAdapter(adapter);
    mPager.setCurrentItem(1);



    addSiteButton = (Button) findViewById(R.id.addSiteButton);
    addSiteButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
           mPager.setCurrentItem(2, true); //Compilation error happens here.
        }


    });


    cancelButton = (Button) findViewById(R.id.cancel_button);
    signInButton = (Button) findViewById(R.id.sign_in_button);

}

答案 1

如果您不想使其成为最终版本,则始终可以将其设置为全局变量。


答案 2

您可以将变量声明为 final,也可以使其成为实例(或全局)变量。如果您将其声明为最终版本,则以后将无法对其进行更改。

在方法中定义并由匿名内部类访问的任何变量都必须是 final。否则,您可以在内部类中使用该变量,而不知道如果变量在内部类中发生更改,然后稍后在封闭作用域中使用,则在内部类中所做的更改不会保留在封闭作用域中。基本上,在内部类中发生的事情保留在内部类中。

我在这里写了一个更深入的解释。它还解释了为什么实例变量和全局变量不需要声明为 final。


推荐