Строитель типа Builder? Как перевести это в котлин?

Я собираюсь передать некоторый код Java в kotlin. Я просто нашел какой-то неудобный заводский метод, который выглядит довольно прямолинейно:

import org.apache.logging.log4j.core.Appender; import org.apache.logging.log4j.core.appender.SyslogAppender; public class Test { public Appender getSyslogAppender(String id, String host, int port, boolean immediateFlush, boolean newLine) { return SyslogAppender.newSyslogAppenderBuilder() .setId(id) .setNewLine(newLine) .withHost(host) .withPort(port) .withImmediateFlush(immediateFlush) .build(); } } 

Поэтому моя первая попытка:

 fun getSyslogAppender(id: String, host: String, port: Int, immediateFlush: Boolean, newLine: Boolean): Appender { return SyslogAppender.newSyslogAppenderBuilder() .setId(id) .setNewLine(newLine) .withHost(host) .withPort(port) .withImmediateFlush(immediateFlush) .build() } 

Но компилятор kotlin был недоволен. Казалось неуверенным, какой тип должен быть возвращен:

 Type inference failed: Not enough information to infer parameter B in fun <b : syslogappender.builder!> newSyslogAppenderBuilder(): B! Please specify it explicitly. 

Хорошо, давайте дадим ему тип:

 SyslogAppender.newSyslogAppenderBuilder<SyslogAppender.Builder>() 

Но ждать:

 One type argument expected for class Builder<b : syslogappender.builder!> : Builder, SocketAppender.AbstractBuilder defined in org.apache.logging.log4j.core.appender.SyslogAppender 

Давайте посмотрим на определение:

 public class SyslogAppender extends SocketAppender { public static class Builder<B extends Builder<B>> extends AbstractBuilder<B> implements org.apache.logging.log4j.core.util.Builder<SocketAppender> 

Какие??? A Builder типа B. Где B имеет супер-тип Builder B? … Некоторые из нас думают и экспериментируют позже … Я не понимаю.

Кто-нибудь знает, как это решить? Я уверен, что это нечто совершенно простое.