2

有一个 Java 库的类,它有aVeryLongNameThatIDontWantToTypeEveryTime. 这个类有一些具有通用名称的静态方法:get()abs()

现在我需要在我的 kotlin 代码中使用它们构建复杂的调用,如下所示:

aVeryLongNameThatIDontWantToTypeEveryTime.get(aVeryLongNameThatIDontWantToTypeEveryTime.abs(aVeryLongNameThatIDontWantToTypeEveryTime.get(...), aVeryLongNameThatIDontWantToTypeEveryTime.get(...)))

现在,我想使用本地范围功能,以免经常重复自己。但是,只需使用

with(aVeryLongNameThatIDontWantToTypeEveryTime) {
  get(abs(get(...), get(...)))
}

不起作用:它抱怨 aVeryLongNameThatIDontWantToTypeEveryTime 没有伴随对象。(当然不是,它是一个 Java 类。)

唯一的“解决方案”是全局导入aVeryLongNameThatIDontWantToTypeEveryTime.*文件,这不是很好,因为方法名称非常通用并且可能发生冲突。

4

1 回答 1

3

您可以使用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 中也有类似的任务。

于 2021-10-22T11:12:15.663 回答