我有一些标有内部属性的课程。 然后我尝试从java中的测试代码设置该属性。 我如何访问这些属性?测试代码和类代码在同一个包中。
示例:
class MainActivity : AppCompatActivity() {
interal var someProperty = "test"
}
测试代码:
@Test
public void firstStartTest() {
val activity = MainActivity()
activity.setSomeProperty("something") //does not compile
}
Android Studio建议使用activity.setSomeProperty $ production_sources_for_module_app(); 但这也无法编译。
答案 0 :(得分:1)
两个类(MainActivity和测试类)必须位于一个模块中。这是一个模块定义:
更具体地说,模块是一组编译在一起的Kotlin文件:
- IntelliJ IDEA模块;
- Maven或Gradle项目;
- 一组文件 通过一次Ant任务调用编译。
https://kotlinlang.org/docs/reference/visibility-modifiers.html
这意味着,检查您的项目结构。
答案 1 :(得分:0)
有两种方法可以做到这一点:
protected
。请注意Java和Kotlin如何区别对待protected
。在Java中,同一包中的其他类可能会访问protected
成员。这样,您的测试类(使用Java)就可以访问它。activity.setSomeProperty$production_...
。使用自动完成功能。来自the documentation:
内部类的成员需要进行名称修饰 很难意外地从Java使用它们并允许重载 具有相同签名的成员彼此看不见 科特林规则;
答案 2 :(得分:0)
添加@JvmField 注释。 它将变量视为受 Java 保护的