使用with代码块创建Groovy实例引发类型转换异常问题
Groovy类型转换错误原因及单语句创建对象并赋值的解决方法
错误原因
Groovy的with方法会返回闭包最后一行代码的执行结果。你的代码中,闭包最后一行是propB = new B(value: "Abc", isSomething: true),这行的返回值是新创建的B类实例,而非A类实例。强行将B实例转换为A类型,必然触发GroovyCastException类型转换异常。
单语句创建A实例并设置propB的正确写法
方法1:在with闭包中显式返回A实例
def x = new A().with { propB = new B(value: "Abc", isSomething: true) this // 显式返回当前A实例 }
无需额外类型转换,因为闭包最终返回的就是A实例。
方法2:使用tap方法(更简洁)
Groovy的tap方法会始终返回调用它的对象本身(也就是A的实例),无需手动返回:
def x = new A().tap { propB = new B(value: "Abc", isSomething: true) }
内容的提问来源于stack exchange,提问作者Aymen Turki
相关产品推荐
相关产品推荐

