【发布时间】:2022-10-18 03:35:57
【问题描述】:
通常,如果我们有一个 int 参数id 来在 Android 中呈现一个资源 ID。我们可以从androidx.annotation 中添加@StringRes 或@DrawableRes 之类的注释。这样 IDE 就可以使用这些信息为我们检查类型,这很好。
现在,我有一个签名看起来像下面的 sn-p 的方法。参数ids 的类型是List<Int>。列表中的元素应该是可绘制的 id 之一,例如,R.drawable.background。但我不知道如何让 IDE 提醒我或很快使用此功能的人。
/**
* @param ids the collection of drawable resources as candidates to be selected.
*/
fun ImageSelector(initialIndex: Int, ids: List<Int>, onSelected: (Int) -> Unit) {}
我试过ids: List<@DrawableRes Int>,但没有用。
我现在为该方法编写 doc cmets。我仍然想知道实现这一点的方法,尽管注释只是一个不错的功能。
【问题讨论】:
-
您是在问是否有当前的方法可以做到这一点,还是在问如果您想自己实现它,您将如何做到这一点?
-
我在问一种没有自定义实现的方法。
-
太糟糕了,我会发现一个有趣的问题可以帮助解决。但为了使其工作,您不仅需要能够注释变量,还需要知道变量上的哪些函数还必须采用类似类型的变量。如果类型上有注释(也许),这可能可以完成,但 DrawbleRes 不能放在类型上。
-
经过多次尝试,我的结论更像你的。那么在其他方面,对于 List 或 Map 之类的集合是否有任何注释?那么它可以接受泛型类型的参数吗?
-
从来没听说过。我确实认为它可以做到。为类型参数 DrawableResType 创建一个类型注释。让注释处理器从类型到封闭类。遍历类的所有元素,找到所有函数和构造函数。在每一个上,遍历所有参数并检查它们是否是该类型的泛型。然后对于其中的每一个,将其视为该参数已对其进行了 DrawableRes 注释(无论在处理可绘制资源的注释处理器中做什么)。所以它是可行的,据我所知,没有人做过。
标签: android android-annotations