能否在另一个类的伴生对象中导入一个方法,而不需要使用“Companion”限定符进行导入?也就是说,是否有可能说
我们正在将一个Java类迁移到Kotlin。我们的类看起来像这样:
import Bar.toFoo
而非 import Bar.Companion.toFoo
,假设 toFoo
是 Bar
伴生对象上的一个方法?
我们正在将一个Java类迁移到Kotlin。我们的类看起来像这样:
class Bar {
static Foo toFoo() {
return new Foo();
}
}
然后,要使用它,我们可以从一个偶然是 Kotlin 的类中这样说:
import Bar.toFoo;
// ...
Bar().convert(toFoo()); // like a Java 8 Collector
// ...
将Bar
转换为Kotlin后,它看起来像这样:
class Bar {
companion object {
@JvmStatic fun toFoo() = Foo()
}
}
我们希望调用代码可以不修改就能正常工作,但是...
import Bar.toFoo
不再起作用,即使使用@JvmStatic也是如此!相反,我们必须将其更新为
import Bar.Companion.toFoo
我们宁愿不这样做 -- 我们想要将Bar类切换到Kotlin而不更新调用方。
有什么想法吗?我们正在使用Kotlin 1.1.2-2。
Bar().convert(toFoo())
而不是Bar().toFoo()
。为什么它必须是静态的? - NaetmultoFoo()
实际上就是Java 8的Collector类之一,就像Collectors.toList()
或者Collectors.toSet()
一样,并且其模型也是相同的。 - Maximport static example.Bar.toFoo;
这样的代码应该可以工作(因为Java不能在根包中有类,所以这里修改了例子中的包名)- 你看到了哪个编译器错误?它是在IDE中还是在构建中? - JK Ly