您如何在Kotlin中注释Pair参数?

Ben*_*wis 5 android kotlin

我想Pair<Int, Int>用作其中一个Int注释的返回类型@StringRes

Pair<@param:StringRes Int, Int> 给出弃用警告。

Lov*_*vis 9

你不能。问题是 Android@StringRes不适用于目标TYPE_USE(或TYPE在 Kotlin 中)。

如果它是这样定义的(java),它将起作用:

@Retention(SOURCE)
@Target({METHOD, PARAMETER, FIELD, TYPE_USE})
public @interface StringRes {
}
Run Code Online (Sandbox Code Playgroud)

现在它会起作用:

fun fooIt(p: Pair<@StringRes Int, Foo>) {}
Run Code Online (Sandbox Code Playgroud)

有一个未解决的问题:https : //issuetracker.google.com/issues/109714923

但是,尽管有弃用警告,您的解决方案可能确实有效。我没有测试过。


Dan*_* W. 9

正如洛维斯所说,你不能完全那样做。

但是如果你想要你的签名,以表示自己的参数不能仅仅是任何Int而是需要一个@StringRes@IdRes@LayoutRes等,你可以使用类型别名作为一种解决方法。

在我的上一个项目中,我有一个ResourceAnnotationAliases.kt刚刚定义的文件:

typealias StringRes = Int
typealias LayoutRes = Int
typealias IdRes = Int
Run Code Online (Sandbox Code Playgroud)

所以现在你可以给你的 Pair 签名Pair<StringRes, Int>

当然,当您输入一个不是来自的 Int 时,它不会在 IDE 中向您显示错误,R.string但至少您的方法签名会明确预期的内容。