Overload Ambiguity默认接口方法

时间:2018-04-09 16:27:29

标签: kotlin

我正在调用java.util.spi.ToolProvider接口,当我在Kotlin中run时,我遇到了一个过载模糊错误。

有两种相同签名的运行方法,一种是默认方法,另一种是未实现。它们都在同一个类中,我该如何解决这个错误?

val jar = ToolProvider.findFirst("jar").orElseThrow()
jar.run(null, null, "--create", "file=foo.jar", "--main-class=foo.bar", "-C", "baz", ".")

1 个答案:

答案 0 :(得分:1)

  

有两种相同签名的运行方法

没有,并且不可能:这不会编译。因为,没有任何方法可以解决歧义。

在这种情况下,这两种方法对前两个参数有不同的类型。所以你需要指定它们,例如如果你想要PrintStream - 采取方法:

jar.run(null as PrintStream?, null as PrintStream?, "--create", "file=foo.jar", "--main-class=foo.bar", "-C", "baz", ".")

请注意文档说

  

抛出:NullPointerException - 如果任何参数为null ,或者args数组中有任何空值

因此,对于这些方法,您首先不会遇到有效的问题。