我正在做一个项目,在这个项目中,我应该使我的客户端程序synchronous
和asynchronous
行为。所以我创建了一个接口(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;
}
}
现在,客户可以根据要求调用getUserSync
或getUserAsync
方法。因此,在getUserSync
方法调用的情况下,如果他们传递空输入键,那么我正在做出响应,该无效输入已传递并将其返回。
现在如何在getUserAsync
方法中做同样的事情,因为该方法只返回 Future,所以我不确定这将如何解决?
在这两种情况下都抛出一个IllegalArgumentException
;这就是它的用途。
public Future<RedResponse> getUserAsync(RedKey rdKeys) {
if (RedUtils.isEmpty(rdKeys)) {
throw new IllegalArgumentException("rdKeys can not be empty");
}
...
}
可是。。。我不明白问题是什么。您正在返回Future<RedResponse>
...这是一个包含RedResponse
的未来.在 getUserSync
方法中,您使用RedResponse
来指示无效输入。