有一个 Java 库的类,其中包含 aVeryLongNameThatIDontWantToTypeEveryTime
。该类有一些具有通用名称的静态方法:get()
、abs()
等。
现在我需要在我的 kotlin 代码中使用它们构建复杂的调用,如下所示:
aVeryLongNameThatIDontWantToTypeEveryTime.get(aVeryLongNameThatIDontWantToTypeEveryTime.abs(aVeryLongNameThatIDontWantToTypeEveryTime.get(...), aVeryLongNameThatIDontWantToTypeEveryTime.get(...)))
现在,我想使用本地作用域函数,以免经常重复。但是,只需使用
with(aVeryLongNameThatIDontWantToTypeEveryTime) {
get(abs(get(...), get(...)))
}
不起作用:它提示 aVeryLongNameThatIDontWantToTypeEveryTime 没有伴生对象。 (当然不是,它是一个Java类。)
唯一的“解决方案”是在文件中全局导入aVeryLongNameThatIDontWantToTypeEveryTime.*
,这不是很好,因为方法名称非常通用并且可能发生冲突。
最佳答案
您可以使用import alias在本地给它一个更方便的名称:
import com.example.aVeryLongNameThatIDontWantToTypeEveryTime as MyShortName
如果您更喜欢范围内的解决方案,那么我认为现在唯一的方法是指定您自己的“范围”:
object aVeryLongNameThatIDontWantToTypeEveryTimeScope {
inline fun get() = aVeryLongNameThatIDontWantToTypeEveryTime.get()
inline fun set() = aVeryLongNameThatIDontWantToTypeEveryTime.set()
inline fun abs() = aVeryLongNameThatIDontWantToTypeEveryTime.abs()
}
with (aVeryLongNameThatIDontWantToTypeEveryTimeScope) {
get()
set()
abs()
}
不幸的是,这需要重写所有函数,包括它们的参数。
将来可以像伴生对象一样使用 Java 静态成员。 Kotlin 的 YouTrack 中也有类似的任务。
关于kotlin - 在 Kotlin 中确定 Java 静态方法的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69675740/