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

时间:2018-06-07 14:54:41

标签: android kotlin

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

Pair<@param:StringRes Int, Int>提供了弃用警告。

2 个答案:

答案 0 :(得分:4)

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

如果它被定义为这样(java):

,它将起作用
@Retention(SOURCE)
@Target({METHOD, PARAMETER, FIELD, TYPE_USE})
public @interface StringRes {
}

现在它会起作用:

fun fooIt(p: Pair<@StringRes Int, Foo>) {}

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

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

答案 1 :(得分:3)

正如洛维斯所说,你不能做到这一点。

但是,如果您希望您的签名传达您的参数不仅可以是任何Int,还需要是@StringRes@IdRes@LayoutRes等。 ,您可以使用typealiases作为解决方法。

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

typealias StringRes = Int
typealias LayoutRes = Int
typealias IdRes = Int

因此,现在您可以给“配对”签名Pair<StringRes, Int>

当然,当您输入不是来自R.string的Int时,它不会在IDE中向您显示错误,但是至少您的方法签名可以清楚地表明预期的结果。