[英]Creation of an instance with `with` block causes a type issue
我正在使用 Groovy 創建我在 ReadyApi 中使用的 package。
在 Groovy 腳本測試步驟中,我執行以下操作:
class B {
String value
boolean isSomething
}
class A {
String name
B propB
public A() {
this.name = "Maydan"
}
}
def x = (A) new A().with { propB = new B(value: "Abc", isSomething: true) }
我收到以下錯誤:
org.codehaus.groovy.runtime.typehandling.GroovyCastException:無法將 object 'B@6c218cea' 與 class 'B' 轉換為 class 'A' 行錯誤:15
有人知道為什么嗎? 這對我來說沒有任何意義。
親切的問候。
PS:我想創建一個 class A 的實例(通過使用其無參數構造函數)並在單個語句中設置其字段 propB
您需要從.with
閉包中返回A
object。 你可以這樣做:
def x = (A) new A().with { propB = new B(value: "Abc", isSomething: true); return it}
但就我個人而言,它看起來有點奇怪。 我會這樣做:
def x = new A(propB: new B(value: "Abc", isSomething: true))
相同的效果,但更緊湊和可讀。 它不需要更改您的A
和B
定義,這個“地圖構造函數”在 Groovy 中開箱即用,它將調用您的無參數構造函數,然后分配必要的字段(在您的情況下為propB
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.