2016-11-28 3 views
0

У меня есть метод с несколькими условными операторами. Я добавил условия if, чтобы избежать аварии NPE. Есть ли способ упростить условия 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 нет ... он снова получает продукт – Selvin

+0

Не совсем @AxelH, есть вызов' product = getProduct (productId); 'so у него есть еще один шанс быть нулевым или непустым. –

ответ

0

Там нет никакого способа, чтобы упростить, если условия в этом примере, если вы хотите сохранить логику проверки 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

@ Селвин черт ... не видел этого ... – AxelH

+0

@Selvin, просто отредактируйте мой ответ, чтобы изменить решение, если вы тот, кто его понижает, пожалуйста, прочитайте его еще раз и скажите мне, если это лучше. – AxelH

0

Вы можете оставить отдельную колонку для информации о продукте/деталях.

Добавить дополнительный столбец isUpdated в таблице и сохранить в качестве значения по умолчанию.

При достижении достаточно серьёзного обновления требования значения столбца

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; 
    } 

Пример

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, то вперед, иначе запросите пользователя, чтобы он не был доступен.

+0

Я пропустил некоторую информацию по этому вопросу? – AxelH

+0

, конечно, не .. – Nas

+0

Тогда я не понимаю, почему вы добавляете столбец в свою таблицу, чтобы упростить условия операторов ... – AxelH