2014-01-11 38 views
-1

我正在開發一個項目,其中我應該使synchronousasynchronous我的客戶端程序的行爲。所以我創建了一個接口(IClient),它有兩種方法,一種是getUserSync,用於同步行爲,另一種是用於異步行爲的getUserAsync如何檢查異步方法中的無效輸入大小寫?

下面是實現我的接口(IClient)我的客戶端程序 -

public class RedClient implements IClient { 

    ExecutorService executor = Executors.newFixedThreadPool(5); 

    @Override 
    public RedResponse getUserSync(RedKey rdKeys) { 

     // How to handle this case in getUserAsync method? 
     if (RedUtils.isEmpty(rdKeys)) { 
      return new RedResponse(null, RedClientError.INVALID_INPUT, RDClientStatus.ERROR); 
     } 

     RedResponse response = null; 
     Future<RedResponse> handle = getHandle(rdKeys); 

      try { 
       response = handle.get(rdKeys.getTimeout(), TimeUnit.MILLISECONDS); 
      } catch (TimeoutException e) { 
       response = new RedResponse(null, RedClientError.TIMEOUT, RDClientStatus.ERROR); 
      } catch (Exception e) { 
       response = new RedResponse(null, RedClientError.ERROR, RDClientStatus.ERROR); 
      } 

      return response; 
    } 

    @Override 
    public Future<RedResponse> getUserAsync(RedKey rdKeys) { 

     // How to handle empty input keys case here just as I have handle it 
     // in getUserSync method 

     return getHandle(rdKeys); 
    } 

    private Future<RedResponse> getHandle(RedKey beInput) { 
     RedClientTask redClientTask = null; 
     Future<RedResponse> future = null; 

      try { 
      RedClientTask = new RedClientTask(beInput); 
      future = executor.submit(redClientTask); 
      } catch (InterruptedException e) { 

      } 
     } 

    return future; 

    } 
} 

現在,客戶可以調用getUserSyncgetUserAsync方法取決於有要求。因此,在getUserSync方法調用的情況下,如果它們被傳遞空的輸入鍵,然後我提出過回一個響應的無效輸入並且返回回..

現在該怎麼做同樣的事情在getUserAsync方法,因爲這方法只返回Future,所以我不確定這是如何解決的?

+0

您已經創建了界面。你不能修改它是通用的嗎?好的,但是你也可以在輸入空的情況下修改'toString()'方法 - 返回INVALID INPUT ... –

+0

hmmm ..不知道該怎麼做。你能提供一個例子,因爲我是新手,所以不知道如何處理這個scnenario? – AKIWEB

回答

1

在兩種情況下都輸出IllegalArgumentException;這就是它的目的。

public Future<RedResponse> getUserAsync(RedKey rdKeys) { 
    if (RedUtils.isEmpty(rdKeys)) { 
     throw new IllegalArgumentException("rdKeys can not be empty"); 
    } 
    ... 
} 

這就是說......我不明白是什麼問題。您正在返回一個Future<RedResponse> ......這是一個包含RedResponse的未來。在您的getUserSync方法中,您使用RedResponse來指示無效輸入。

+0

謝謝Brian。拋出無效輸入的IllegalArgumentException是否是一種好的做法,或者我們應該做出錯誤響應並將它們發回來? – AKIWEB

+0

::聳肩::個人喜好。我更喜歡這個異常,因爲它在調用方法時是立即的,而不是在處理返回的響應時必須考慮的事情(特別是在討論異步時) –