簡體   English   中英

使用“with”塊創建實例會導致類型問題

[英]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))

相同的效果,但更緊湊和可讀。 它不需要更改您的AB定義,這個“地圖構造函數”在 Groovy 中開箱即用,它將調用您的無參數構造函數,然后分配必要的字段(在您的情況下為propB )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM