我想Pair<Int, Int>用作其中一个Int注释的返回类型@StringRes。
Pair<@param:StringRes Int, Int> 给出弃用警告。
你不能。问题是 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
但是,尽管有弃用警告,您的解决方案可能确实有效。我没有测试过。
正如洛维斯所说,你不能完全那样做。
但是如果你想要你的签名,以表示自己的参数不能仅仅是任何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但至少您的方法签名会明确预期的内容。
| 归档时间: |
|
| 查看次数: |
608 次 |
| 最近记录: |