2016-06-06 2 views
0

나는 간단한 if 문을 사용하여 할려고? 무늬. "진술 아님"- 오류가 발생했습니다. 누군가 정상적인 if 문을 사용하여 이런 일이 일어나지 않는 이유를 설명해 줄 수 있습니까?아니 계책 (컴파일러 오류 자바/안드로이드)

오류 :

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

없음 오류 없습니다 :

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

이 완전히 같은 동작입니다 ....

+2

결과를 변수에 지정해야합니다. – Raghavendra

+0

'insert_SQL_RSServer.bindNull (0)'과'insert_SQL_RSServer.bindLong (0, cursor.getLong (0))'은 리턴 타입을 가져야합니다 .. 당신의 경우에는 무효 여야합니다 .. – Sanoop

답변

5

삼항 조건 연산자는 표현식이며, 그것은이 있어야합니다 반환 유형은 두 번째 및 세 번째 피연산자의 유형에 따라 결정됩니다.

따라서 bindNull()bindLong() 메서드의 반환 유형이 void이면이 연산자에서 사용할 수 없습니다. 자바에서

+1

고마워! 그러나 이것은 여전히 ​​허황입니다. 그러나 .. –

+0

@ Eran - 당신이 말하는 것은 사실이지만, 실제로 오류 메시지를 설명하지는 않습니다. 'insert _...'호출 >>은 << 문장입니다. –

1

는 표현은 다음의 경우를 제외하고는 문이 아닌 :

StatementExpression: 
    Assignment 
    PreIncrementExpression 
    PreDecrementExpression 
    PostIncrementExpression 
    PostDecrementExpression 
    MethodInvocation 
    ClassInstanceCreationExpression 

참조 : JLS 14.8.

삼항 식은 위와 같지 않습니다.

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

그렇습니다. 이것이 Java가 지정된 방법입니다.

이것은 간단하게 언어 디자이너의 개인적인 취향/견해를 반영한 ​​디자인 선택 일 수 있습니다. 또는 선택의 이유가 더 깊거나 이유가있을 수 있습니다. 예 : 모호한 구문 분석으로 문제를 해결했을 수도 있습니다.