java中的条件方法链接或调用自定义方法

java中的条件方法链接或调用自定义方法,java,method-chaining,Java,Method Chaining,我正在看EclipseJGit库。它应该能够同时进行SSH和HTTPS连接,并且每次进行推送、克隆等操作时都需要提供SSH会话或用户凭据。但我不知道在使用方法链接时如何进行 if (isSSH(repository)) { call = git .push() .setTransportConfigCallback(transport -> { SshTransport sshTransport

我正在看EclipseJGit库。它应该能够同时进行SSH和HTTPS连接,并且每次进行推送、克隆等操作时都需要提供SSH会话或用户凭据。但我不知道在使用方法链接时如何进行

if (isSSH(repository)) {
        call = git
            .push()
            .setTransportConfigCallback(transport -> {
                SshTransport sshTransport = (SshTransport) transport;
                sshTransport.setSshSessionFactory(getSshSession(repository));
            })
            .setPushAll()
            .call();
}
else {
        call = git
            .push()
            .setCredentialsProvider(prepareCredentialsProvider(repository))
            .setPushAll()
            .call();
}
是否可以通过设置条件或使用自定义的“prepareConnection”方法替换setTransportConfigCallback和setCredentialsProvider来简化它

setTransportConfigCallback和setCredentialsProvider都位于此类中:

public abstract class TransportCommand<C extends GitCommand, T> extends
        GitCommand<T> {
    public C setTransportConfigCallback(
            final TransportConfigCallback transportConfigCallback) {
        this.transportConfigCallback = transportConfigCallback;
        return self();
    }

    public C setCredentialsProvider(
            final CredentialsProvider credentialsProvider) {
        this.credentialsProvider = credentialsProvider;
        return self();
    }
    ...
它可以这样使用:

Iterable<PushResult> call = ((PushCommand) prepareConnection(git.push(), repository))
                    .setPushAll()
                    .call();
Iterable调用=((PushCommand)prepareConnection(git.push(),repository))
.setPushAll()
.call();

Imo它看起来没那么糟糕。我想您可以尝试在if/else之外提取重复的部分?
Iterable<PushResult> call = ((PushCommand) prepareConnection(git.push(), repository))
                    .setPushAll()
                    .call();