2017-03-29 98 views
0

我有一個使用的代碼塊,如果有聲明,運營商:如果與和運營商的java

final String NODE_TYPE_LIST = "List"; 
final String NODE_TYPE_DETAIL = "Detail"; 
if ((!NODE_TYPE_LIST.equalsIgnoreCase(dataNodeBean.getType())) 
        && (!NODE_TYPE_DETAIL.equalsIgnoreCase(dataNodeBean.getType()))) { 
       throw new InvalidNodeTypeException("Invalid Node type."); 
      } 

對於所示例,如果dataNodeBean.getType()返回「目錄」。 根據this鏈接,僅當if語句中的兩個表達式都返回true時,上面的代碼纔會拋出InvalidNodeTypeException。但是,當我調試程序(其中dataNodeBean.getType()返回「列表」)我看到兩個表達式正在評估,即使第一個表達式返回false,作爲結果引發InvalidNodeTypeException(自定義異常)引發。 我對此代碼的期望是當dataNodeBean.getType()不返回List或Detail時引發異常。 我不明白我在這裏做錯了什麼。

+0

你確定'getType'返回'String'而不是其他對象嗎? – npinti

+0

@npinti yes getType返回String。 – HyperioN

+0

@KrutiPatel這導致了僞代碼'value!= aString OR值!= anotherString'這總是'true',因爲'value'不能等於兩個字符串 –

回答

0

您的代碼非常好。我跑瞭如下測試:

public static void main(String[] args) { 
    System.out.println(test("A")); 
    System.out.println(test("B")); 
    System.out.println(test("C")); 
} 

private static boolean test(String value) { 
    return (!"a".equalsIgnoreCase(value)) && (!"b".equalsIgnoreCase(value)); 
} 

它返回

false 
false 
true 

正如你所期望的。我懷疑問題出在getType方法中。一種簡單的確認方法是將支票移動到一個單獨的方法,該方法通過getType的結果,然後編寫一些單元測試,確認它對於「列表」或「詳細信息」以外的任何內容返回true。