有一个Java库的类有aVeryLongNameThatIDontWantToTypeEveryTime
。该类有几个具有通用名称的静态方法:get()
,abs()
等。
现在我需要在kotlin代码中使用它们构造复杂的调用,就像这样:
aVeryLongNameThatIDontWantToTypeEveryTime.get(aVeryLongNameThatIDontWantToTypeEveryTime.abs(aVeryLongNameThatIDontWantToTypeEveryTime.get(...), aVeryLongNameThatIDontWantToTypeEveryTime.get(...)))
现在,我想使用一个局部作用域函数,以便不经常重复自己。但是,简单地使用
with(aVeryLongNameThatIDontWantToTypeEveryTime) {
get(abs(get(...), get(...)))
}
不起作用:它抱怨aVeryLongNameThatIDontWantToTypeEveryTime没有配套对象。(当然不是,它是一个Java类。)
唯一的"解决方案"是全局导入aVeryLongNameThatIDontWantToTypeEveryTime.*
在文件中,这不是很好,因为方法名称是如此通用,可能会发生冲突。
您可以使用import别名在本地为其提供一个更方便的名称:
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中也有类似的任务。