Buildertypes的生成器? 如何把这个翻译成kotlin?

我正要将一些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编译器并不高兴。 似乎不确定应该返回哪种types:

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

好的,让我们给它一个types:

 SyslogAppender.newSyslogAppenderBuilder() 

可是等等:

 One type argument expected for class 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> extends AbstractBuilder implements org.apache.logging.log4j.core.util.Builder 

什么??? Btypes的生成器。其中B具有Btypes的超types生成器? …我们以后的一些想法和尝试…我不明白。

有人知道如何解决这个问题吗? 我相信它的东西非常简单。