2017-07-08 6 views
0

内部クラスのh変数にアクセスしようとしましたが、「最終変数hに値を代入できません」というエラーが表示され続けます。私はクイックフィックスを試み、 "hを最終要素配列に変換する"ように指示しました。それはどういう意味ですか?ローカル変数に値を割り当てることができない内部クラスからなぜmyVariableを最終要素配列に変換するのですか?

int Update() 
{ 
    final int h; 
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
    preferences.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() { 


     @Override 
     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 

      if(key.equalsIgnoreCase("PINCODE")) 
      { 
       h = sharedPreferences.getInt(key,0); 

      } 
     } 
    }); 

    return h; 
} 

}

+1

なぜ、プログラムが 'return h'に達する前に(' h'を設定するために)リスナーが呼び出されたと思いますか?私はここにあなたのコードのロジックが表示されません。 – Tom

+0

[lambdaが最終オブジェクトの代わりに単一要素配列を使用する理由](https://stackoverflow.com/questions/28961578/why-lambda-forces-me-to-use-single-element-array - 最終オブジェクトの代わりに) – DaveNOTDavid

答えて

1

は(自分自身)を囲むクラスのどこかに宣言されていますが、状態(コール・メソッド、セッターを、変更することができます。 ..)を返します(変数がプリミティブ型ではなくオブジェクトを指している場合)。配列はオブジェクトです。

Java言語仕様のチェック - 約inner classesに関するセクション。

関連する問題