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生成器? …我们以后的一些想法和尝试…我不明白。
有人知道如何解决这个问题吗? 我相信它的东西非常简单。