我想使用Pair<Int, Int>
作为返回类型,其中一个Int用@StringRes
注释。
Pair<@param:StringRes Int, Int>
提供了弃用警告。
答案 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中向您显示错误,但是至少您的方法签名可以清楚地表明预期的结果。