我们有两个项目,其中一个 kotlin 发布了一个由 java 导入的包。
在 kotlin 中,是一个类似的值类
@JvmInline
value class CountryId(private val id: UUID) {
override fun toString(): String = id.toString()
companion object { fun empty(): CountryId = CountryId(EMPTY_UUID) }
}
在java中,我们看不到构造函数,或者实际实例化这个类。我也尝试在 Kotlin 中创建工厂来创建它们
class IdentifierFactory
{
companion object {
fun buildString(): String {
return "hello"
}
fun buildCountry(): CountryId {
return CountryId.empty()
}
}
}
在java中,我可以调用IdentifierFactory.Companion.buildString()
它并且它会工作,但IdentifierFactory.Companion.buildCountry()
甚至不存在。
Java 的 Value 类真的这么糟糕吗?
附言。我也尝试过@JvmStatic,但没有成功
pps。如果我从 java 端反编译 kotlin 字节码,得到 CountryId.decompiled.java,这就是构造函数的样子
// $FF: synthetic method
private CountryId(UUID id) {
Intrinsics.checkNotNullParameter(id, "id");
super();
this.id = id;
}
购买力平价。Kotlin 1.5.21 和 Java 12