Warum folgendes erlaubt ist:final boolean [] vs final boolean innerhalb 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;
Aber die folgenden nicht?
final boolean success;
Thread httpThread = new Thread(new Runnable() {
@Override
public void run() {
HTTPConnect httpConnect = new HTTPConnect(getContext());
success = false
...
if (whatever)
success = true;
Ich beziehe mich auf die boolean success
hier. Zuerst dachte ich, es wäre, weil eine lokale Deklaration den Umfang verlieren würde, während eine Deklaration auf dem Heap überleben würde, nachdem der Bereich beendet ist, aber das scheint nicht der Fall zu sein, da eine Deklaration wie final ArrayList<Foo> bar = new ArrayList<>()
keinen Wert zugewiesen werden kann.
Entfernen Sie alle unnötigen Teile aus Ihrem Code, fragen Sie, warum das nicht funktioniert: 'boolean Erfolg; success [0] = true; ' Die Antwort ist einfach: weil' success' ein einfacher boolescher Wert ist, kein Array. – Kiryl
@Kiryl Es war ein Tippfehler, behoben. – ShrimpCrackers