0

アプリケーションに単純なクラスを追加します。

public class Nomenklatura implements Serializable
    {
        private Boolean SmenaIsOpen=false;
        public Nomenklatura()
        {
            SmenaIsOpen=false;
        }
        public String OpenSmena()
        {
            SmenaIsOpen=true;
            return "ok";
        }
        public String CloseSmena()
        {
            return "ok";
        }
        public Boolean GetSmenaIsOen()
        {
            return SmenaIsOpen;
        }
        public void SetSmenaIsOen(Boolean val)
        {
            SmenaIsOpen=val;
        }

    }

アプリケーションは、このクラスの 1 つのオブジェクトで動作する必要があります。アクティビティで使用する場合:

@Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.presmena);  
        Nomenklatura Asortiment;
         Asortiment=(Nomenklatura) getIntent().getExtras().getSerializable("Nomenklatura");
         Button but1=(Button) findViewById(R.id.button1);
            but1.setOnClickListener(new OnClickListener() 
            {
                @Override
                public void onClick(View arg0) 
                {
                    if(Asortiment.GetSmenaIsOen()) Asortiment.CloseSmena();
                    else Asortiment.OpenSmena();
                }
            });
    }

エラーが表示されます: 別のメソッド Presmena.java で定義された内部クラス内の非最終変数 Asortiment を参照できません。何が間違っているのか、理解するのに役立ちます

4

2 に答える 2

0

Asortiment 変数を final として宣言する必要があります

final Nomenklatura Asortiment;
于 2013-01-05T12:50:46.040 に答える
0

このように宣言します

final Nomenklatura Asortiment = ...

そしてそれはうまくいくはずです。内部クラスを宣言し、それらにローカル変数を使用させる場合 (考えてみれば、通常は内部スコープ外になります)、それらをキャプチャする必要があります。finalJava では、意図しない動作を避けるために、そのような変数を としてマークする必要があります。

于 2013-01-05T12:51:10.453 に答える