无法通过Class::property引用Kotlin自动生成Setter的问题排查
解决Kotlin Fixtures配置Builder时访问私有字段的问题
你的问题出在直接用属性引用Builder::request访问了Builder类内部的私有成员变量,而非调用公共的setRequest方法。Kotlin Fixtures的property方法如果传入属性引用,会直接尝试访问字段本身,不会自动映射到对应的setter方法。
修复方案
把私有属性引用换成字符串形式的属性名,Fixture库会自动按照JavaBean规范匹配对应的公共setter方法:
val ServiceRequestFixture = MyCustomTestFixture<Builder> { // 用字符串"request"代替Builder::request,库会自动调用setRequest方法 property<Builder, FakeRequest>("request") { FakeRequestFixture } property<Builder, String>("fullRequestURI") { // TODO: use Faker "123" } }
另一种可选方案:直接调用setter方法
如果你的Fixture库支持直接配置实例,可以在配置块里直接调用Builder的setter方法,逻辑更直观:
val ServiceRequestFixture = MyCustomTestFixture<Builder> { configure { builder -> builder.setRequest(FakeRequestFixture.create()) // 假设Fixture有create方法生成实例 builder.setFullRequestURI("123") } }
原因说明
当你使用Builder::request时,Kotlin编译器会解析为Builder类中声明的私有request字段,自然会抛出访问权限错误。而使用字符串形式的属性名时,Fixture库会通过反射查找符合命名规范的公共setter方法(比如属性名request对应setRequest),这样就能合法调用你需要的公共方法了。
内容的提问来源于stack exchange,提问作者the_drow
相关产品推荐
相关产品推荐

