2016-06-06 9 views
0

Ich versuche, eine einfache if-Anweisung mit der? Muster. Resultierend in einer "Nicht eine Aussage" - Fehler. Kann mir bitte jemand erklären, warum das nicht mit einer normalen if-Anweisung geschieht?Keine Erklärung (Compiler Fehler Java/Android)

Fehler:

cursor.isNull(0) ? insert_SQL_RSServer.bindNull(0) : insert_SQL_RSServer.bindLong(0, cursor.getLong(0)); // id 

Kein Fehler:

if(cursor.isNull(0)) 
    insert_SQL_RSServer.bindNull(0); 
else 
    insert_SQL_RSServer.bindLong(0, cursor.getLong(0)); 

Das ist völlig das gleiche Verhalten ....

+2

müssen Sie das Ergebnis einer Variablen zuweisen. – Raghavendra

+0

'insert_SQL_RSServer.bindNull (0)' und 'insert_SQL_RSServer.bindLong (0, cursor.getLong (0))' sollte einen Rückgabetyp hat .. In Ihrem Fall muss es ungültig .. – Sanoop

Antwort

5

Der ternäre Bedingungsoperator ist ein Ausdruck, und es muss eine haben Rückgabetyp, der durch die Typen des 2. und 3. Operanden bestimmt wird.

Wenn daher Ihre bindNull() und bindLong() Methoden void Rückgabetyp haben, können sie in diesem Operator nicht verwendet werden.

+1

Dank! Aber das ist immer noch Schwachsinn ... Aber .. –

+0

@Eran - Was Sie sagen, ist wahr, aber es erklärt nicht wirklich die Fehlermeldung. Die 'einfügen _...' Anrufe >><< sind Aussagen. –

1

In Java, ein Ausdruck ist keine Aussage, außer im Fall der folgenden Möglichkeiten:

StatementExpression: 
    Assignment 
    PreIncrementExpression 
    PreDecrementExpression 
    PostIncrementExpression 
    PostDecrementExpression 
    MethodInvocation 
    ClassInstanceCreationExpression 

Referenz: JLS 14.8.

Ein ternärer Ausdruck ist nicht einer der oben genannten.

Thanks! But this is still bullshit... However..

So ist es. So wird Java angegeben.

Dies könnte einfach eine Designwahl sein, die den persönlichen Geschmack/Ansichten der Sprachdesigner bezüglich der Einfachheit widerspiegelt. Alternativ könnte es einen tieferen Grund oder Gründe für die Wahl geben; z.B. es haben könnte einige Probleme mit mehrdeutigen Parsen gelöst.