2016-11-28 4 views
0

몇 가지 조건문이있는 메소드가 있습니다. if 조건을 추가하여 NPE 충돌을 피할 수 있습니다. null이 아닌 체크를 추가 한 if 조건을 단순화 할 수있는 방법이 있습니까?조건문 단순화 android

private void addComplementaryProductToBasket(String productId, String comboName) { 
     Product product = ProductComboUtils.getProductById(productId); 
     if (null == product) { 
      LOG.info("Product does not exist in ProductComboUtils, fetching from DB"); 
      product = getProduct(productId); 
     } 
     if (product != null){ 
      product.setPrice(BigDecimal.ZERO); 
      product.setCurrencyCode(currentBasket.getCurrencyCode()); 
      // Ensure to add comboName with purchase, this 
      currentBasket.addToPurchase(product, comboName); 
      int numberOfComplementaryProducts = 
        currentBasket.getPurchaseLineItemForProduct(product.getProductId()).getNumberOfComplementaryProducts(); 
      currentBasket.getPurchaseLineItemForProduct(product.getProductId()).setNumberOfComplementaryProducts(
        ++numberOfComplementaryProducts); 
     }else 
     { 
      CrashUtil.logNonFatalException("Product instance is null for productId: " + productId); 
     } 
    } 
+0

'product == null'과'product! = null'을 두 번 확인하십시오. else는 첫 번째와 동일한 조건입니다. ('product == null') – AxelH

+0

@AxelH no ... 그는 제품을 다시 얻습니다. – Selvin

+0

정확히 @AxelH 인 경우,'product = getProduct (productId);'라는 호출이 있습니다. null 또는 null이 아닌 또 다른 기회가 있습니다. –

답변

0

이 예에서 조건이 당신은 DB에서 가져 오는 먼저 ProductComboUtils을 확인하고의 논리를 유지하려는 경우 경우를 단순화 할 수있는 방법이 없습니다.

0

두 개의 소스에서 값을 얻으므로 간단히 검사 (Utlis 또는 DB)를 수행하는 방법을 만들면됩니다.

public Product getProductTest(String productId){ 
    Product product = ProductComboUtils.getProductById(productId); 
    if (null == product) { 
     LOG.info("Product does not exist in ProductComboUtils, fetching from DB"); 
     product = getProduct(productId); 
    } 
    return product; 
} 

그런 다음 값을 가져 와서 값을 확인하면됩니다. 이 경우 null 다음 문제가 있으며 오류가 표시됩니다.

private void addComplementaryProductToBasket(String productId, String comboName) { 
     Product product = getProductTest(productId); 
     if (product != null){ 
      .... 
     } else ... 
} 
+0

@Selvin 젠장 ... 저것을 보지 못했습니다 ... – AxelH

+0

@ 셀빈, 방금 해결책을 바꾸기 위해 내 대답을 편집하십시오. 만약 당신이 그것을 downvote하는 사람이라면, 다시 읽으십시오. – AxelH

0

제품 정보/상세 정보 가용성을 위해 별도의 컬럼을 보관할 수 있습니다.

추가 열 테이블에을 업데이트하고 을 기본값으로 유지하십시오.

당신은 제품 정보를 기본 및 확인 값으로 위의 메소드를 호출 얻기 전에

public Product getTestProduct(String productId){ 
    Product product = null; 
    if (ProductComboUtils.isProdUpdated(productId) == 1) { 
     return product = ProductComboUtils.getProductById(productId); 
    }else{ 
     LOG.info("Product does not exist in ProductComboUtils, fetching from DB"); 
     return product = getProduct(productId); 
} 
} 

1

public void isProdUpdated(int id) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     try { 
     Cursor cursor = db.rawQuery(selectQuery, null); // selectQuery is your complete query 
     if (cursor.getCount() != 0 
       && cursor.moveToFirst()) { 
      int status = cursor.getInt(cursor 
        .getColumnIndex(Const.KEY_IS_UPDATED)); 
      cursor.close(); 
      return status; 
     } 
     cursor.close(); 
    } catch (Exception e) { 
     return 0; 
    } 
    return 0; 
    } 

충분한 요구 사항 업데이트를 열 값에 도달하면. 1을 반환하면 계속 진행하고, 그렇지 않으면 사용자에게 사용 가능한 정보가 없는지 묻습니다.

+0

질문에 대한 정보가 누락 되었습니까? – AxelH

+0

물론 아닙니다 .. – Nas

+0

그렇다면 조건문을 단순화하기 위해 테이블에 열을 추가하는 이유를 이해하지 못합니다. – AxelH