内部の最終ブール対なぜ次は許可されている:最終ブール[]は、Runnableを
final boolean [] success = new boolean[1];
Thread httpThread = new Thread(new Runnable() {
@Override
public void run() {
HTTPConnect httpConnect = new HTTPConnect(getContext());
success[0] = false
...
if (whatever)
success[0] = true;
しかし、次のではないでしょうか?
final boolean success;
Thread httpThread = new Thread(new Runnable() {
@Override
public void run() {
HTTPConnect httpConnect = new HTTPConnect(getContext());
success = false
...
if (whatever)
success = true;
ここではboolean success
を参照しています。 最初は、ローカル宣言がスコープを失うためだと思っていましたが、ヒープ宣言はスコープの終了後も生き残りますが、final ArrayList<Foo> bar = new ArrayList<>()
のような宣言は値を代入することができないため、そうではありません。
コードから不要な部分をすべて削除すると、これが機能しない理由がわかります: 'ブールの成功; success [0] = true; ' 答えは簡単です:' success'はプリミティブなブール値で配列ではないからです。 – Kiryl
@Kirylそれはタイプミスだった。 – ShrimpCrackers