Android 附加kotlin扩展函数基对象的上下文

Android 附加kotlin扩展函数基对象的上下文,android,kotlin,extension-function,Android,Kotlin,Extension Function,这个问题专门针对Android开发中使用的Kotlin的扩展功能 因此,Kotlin为我们提供了向类中添加某些扩展行为的能力,以扩展基于类的行为 示例:(摘自我当前的Android项目,用于在Espresso测试中的viewAssertion) 在我的用例中,我可以像这样使用它: R.id.password_text.viewInteraction().perform(typeText(PASSWORD_PLAIN_TEXT), pressDone()) 一切都很好,除了这个扩展函数将扩展行为

这个问题专门针对Android开发中使用的Kotlin的扩展功能

因此,Kotlin为我们提供了向类中添加某些扩展行为的能力,以扩展基于类的行为

示例:(摘自我当前的Android项目,用于在Espresso测试中的viewAssertion)

在我的用例中,我可以像这样使用它:

R.id.password_text.viewInteraction().perform(typeText(PASSWORD_PLAIN_TEXT), pressDone())
一切都很好,除了这个扩展函数将扩展行为提供给所有
Int
对象,而不仅仅是Android中的视图ID,这一点都不好


问题是,是否有任何方法可以为这个
Int
提供上下文,就像我们在Android中为上述给定案例提供的上下文一样?

您无法区分资源中的Int和普通Int。它是同一个类,您正在为Int类型的所有类添加扩展

另一种方法是创建自己的Int包装器:

class IntResource(val resource: Int) {

    fun viewInteraction(): ViewInteraction {
        return onView(CoreMatchers.allOf(ViewMatchers.withId(resource), ViewMatchers.isDisplayed()))
    }
}
然后是这样的:

IntResource(R.id.password_text).viewInteraction().perform(typeText(PASSWORD_PLAIN_TEXT), pressDone())

谢谢,是的,我正在寻找一种支持注释的方法,这种方法至少会给我们一个编译时的无效使用警告。据我所知,这些扩展函数是作为编译阶段处理的。
IntResource(R.id.password_text).viewInteraction().perform(typeText(PASSWORD_PLAIN_TEXT), pressDone())