2016-07-15 2 views
-2

Ich möchte nicht eine doppelte Flag verwenden.Android "konstante Ausdruck erforderlich"

package org.zzjbook.unit; 
public class Unit { 
    private static int flag = 1; 
    public final static synchronized int getFlag() { 
     return flag++; 
    } 
} 

Ich benutze die obige Funktion, um die Flagge zu bekommen.

import static org.zzjbook.unit.Unit.getFlag; 
public class Out { 
    private final static int PRINT = getFlag(); 

    private Handler handler = new Handler() { 
     public void handleMessage(Message msg) { 
      switch (msg.what) { 
       case PRINT: 
        break; 
      } 
     } 
    } 
} 

IDE gibt den Fehler. "konstante Ausdruck erforderlich". Wie kann ich diesen Fehler lösen?

+0

Auf welcher Linie? Warum verwenden Sie auch keinen AtomicInteger? –

+0

@TimCastelijns warum ein AtomicInteger? – Blackbelt

+0

Was bedeutet Ihre Variable 'PRINT'? Es sieht mir sehr verdächtig ... – shmosel

Antwort

2

switch Fälle müssen konstante Ausdrücke haben, wie Sie gesagt wurden. Ändern Sie es zu einem if stattdessen:

public void handleMessage(Message msg) { 
    if (msg.what == PRINT) { 
     //... 
    } 
} 
+0

Warum verwende ich "final", aber es ist keine Konstante – zzjbook

+1

@zzjbook Eine Konstante muss zur Kompilierzeit bekannt sein. Der Wert von 'PRINT' in Ihrem Code hängt davon ab, wann 'Out' initialisiert wird. – shmosel

Verwandte Themen