在try with resources中处理来自close()的IOException的java 8 lambda方法

在try with resources中处理来自close()的IOException的java 8 lambda方法,lambda,java-8,Lambda,Java 8,Java8Lambdas的正确语法是什么 catch (Exception e) { throw JiraUtils.convertException(e); } 而不是在所有需要这个JiraRest客户端的方法中重复它 @Override public GTask loadTaskByKey(String key, Mappings mappings) throws ConnectorException { try(JiraRestClient client = Ji

Java8Lambdas的正确语法是什么

catch (Exception e) {
        throw JiraUtils.convertException(e);
}
而不是在所有需要这个JiraRest客户端的方法中重复它

@Override
public GTask loadTaskByKey(String key, Mappings mappings) throws ConnectorException {
    try(JiraRestClient client = JiraConnectionFactory.createClient(config.getServerInfo())) {
        final JiraTaskLoader loader = new JiraTaskLoader(client, config.getPriorities());
        return loader.loadTask(key);
    } catch (Exception e) {
        throw JiraUtils.convertException(e);
    }
}

@Override
public List<GTask> loadData(Mappings mappings, ProgressMonitor monitorIGNORED) throws ConnectorException {
    try(JiraRestClient client = JiraConnectionFactory.createClient(config.getServerInfo())) {
        final JiraTaskLoader loader = new JiraTaskLoader(client, config.getPriorities());
        return loader.loadTasks(config);
    } catch (Exception e) {
        throw JiraUtils.convertException(e);
    }
}

下面是:

您可以这样做:

@Override
public GTask loadTaskByKey(String key, Mappings mappings) throws ConnectorException {
  return withJiraRestClient(client -> {
    final JiraTaskLoader loader = new JiraTaskLoader(client, config.getPriorities());
    return loader.loadTask(key);
  });
}

@Override
public List<GTask> loadData(Mappings mappings, ProgressMonitor monitorIGNORED) throws ConnectorException {
  return withJiraRestClient(client -> {
    final JiraTaskLoader loader = new JiraTaskLoader(client, config.getPriorities());
    return loader.loadTasks(config);
  });
}

private <T> T withJiraRestClient(JiraRestClientAction<T> f) throws ConnectorException {
  try (JiraRestClient client = JiraConnectionFactory.createClient(config.getServerInfo())) {
    return f.apply(client);
  } catch (IOException e) {
    throw JiraUtils.convertException(e);
  }
}

@FunctionalInterface
interface JiraRestClientAction<T> {
  T apply(JiraRestClient client) throws IOException;
}
@覆盖
公共GTask loadTaskByKey(字符串键、映射)引发ConnectorException{
返回JIRARestClient(客户端->{
final JiraTaskLoader=new JiraTaskLoader(client,config.getPriorities());
返回loader.loadTask(键);
});
}
@凌驾
公共列表loadData(映射、ProgressMonitor monitorIGNORED)引发ConnectorException{
返回JIRARestClient(客户端->{
final JiraTaskLoader=new JiraTaskLoader(client,config.getPriorities());
返回loader.loadTasks(配置);
});
}
private T withJiraRestClient(JiraRestClientAction f)抛出ConnectorException{
try(JiraRestClient=JiraConnectionFactory.createClient(config.getServerInfo())){
返回f.apply(客户);
}捕获(IOE异常){
抛出JiraUtils.convertException(e);
}
}
@功能接口
接口JiraRestClientation{
T apply(JiraRestClient)抛出IOException;
}

为什么需要使用lambda解决方案?请随意分享您的lambda less版本,该版本可消除多个方法中的重复,并具有各种逻辑和返回参数,所有这些方法都需要创建JiraRestClient实例,然后关闭它并处理可能的关闭异常。当然,您可以在这里使用常规回调,但我觉得lambda语法将是最简洁的。
@Override
public GTask loadTaskByKey(String key, Mappings mappings) throws ConnectorException {
  return withJiraRestClient(client -> {
    final JiraTaskLoader loader = new JiraTaskLoader(client, config.getPriorities());
    return loader.loadTask(key);
  });
}

@Override
public List<GTask> loadData(Mappings mappings, ProgressMonitor monitorIGNORED) throws ConnectorException {
  return withJiraRestClient(client -> {
    final JiraTaskLoader loader = new JiraTaskLoader(client, config.getPriorities());
    return loader.loadTasks(config);
  });
}

private <T> T withJiraRestClient(JiraRestClientAction<T> f) throws ConnectorException {
  try (JiraRestClient client = JiraConnectionFactory.createClient(config.getServerInfo())) {
    return f.apply(client);
  } catch (IOException e) {
    throw JiraUtils.convertException(e);
  }
}

@FunctionalInterface
interface JiraRestClientAction<T> {
  T apply(JiraRestClient client) throws IOException;
}