2011-09-08 28 views
6

Tôi đang cố gắng sử dụng khối có trong Groovy để dễ dàng sinh lợi cho lớp của tôi, nhưng tôi nhận được lỗi sau. Bất cứ ai có thể cho tôi biết những gì tôi đang làm sai?groovy "with" chặn truy vấn sử dụng

MyXMLTemplate template = new MyXMLTemplate().with { 
    TxId = 'mnop' 
    oapTxId = 'abcd' 
} 

Các lỗi tôi nhận được là:

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'abcd' with class 'java.lang.String' to class 'org.example.MyXMLTemplate' 
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:331) 
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:599) 

Tôi đang sử dụng groovy 1.8.0

Trả lời

14

Bạn cần phải trả lại mẫu thân từ with khối:

MyXMLTemplate template = new MyXMLTemplate().with { 
    TxId = 'mnop' 
    oapTxId = 'abcd' 
    it 
} 
+1

có công trình này! Tài liệu này không có điều này mặc dù ... :( – Abe

+1

Trang nào của tài liệu? Trang Groovy chính là một wiki nên có thể được thay đổi thành đúng :-) –

+0

Tôi nên nói "Javadoc". Tôi đã tải xuống mã nguồn và tôi nhận được tài liệu chưa hoàn chỉnh này về di chuột .-> Điều này thường được sử dụng để đơn giản hóa việc tạo đối tượng, chẳng hạn như ví dụ này: def p = new Person() .với {firstName = 'John' lastName = 'Doe '} – Abe

3

Thật khó để xem vấn đề là gì mà không thấy định nghĩa của lớp học của bạn. Tôi giả sử rằng TxIdoapTxId là cả hai thuộc tính của lớp.

Tôi nghi ngờ lỗi của bạn là do oapTxId thuộc loại MyXMLTemplate và do đó không thể gán được từ Chuỗi.

Incidetally, như khối with của bạn chỉ được khởi tạo thuộc tính của lớp, bạn có thể sử dụng nhiều thành ngữ constructor và setters cách tiếp cận:

MyXmlTemplate template = new MyXMLTemplate(TxId: 'mnop', oapTxId : 'abcd') 
Các vấn đề liên quan