खोने के बिना कस्टम कन्स्ट्रक्टर जोड़ना डिफ़ॉल्ट रूप से प्रत्येक ग्रोवी क्लास में नक्शा कन्स्ट्रक्टर होता है, उदा।डिफॉल्ट मैप कन्स्ट्रक्टर
class Foo {
def a
def b
}
// this works
new Foo(a: '1', b: '2')
हालांकि, यह डिफ़ॉल्ट नक्शा खोने के बिना अपने स्वयं के निर्माता को जोड़ने के लिए लगता है कि जैसे ही आप अपनी खुद की एक निर्माता के रूप में जोड़ने, यह डिफ़ॉल्ट निर्माता उपलब्ध
class Foo {
Foo(Integer x) {
println 'my constructor was called'
}
def a
def b
}
// this works
new Foo(1)
// now this doesn't work, I get the error: groovy.lang.GroovyRuntimeException:
// failed to invoke constructor
new Foo(a: '1', b: '2')
नहीं है, यह संभव है निर्माता? मैंने कक्षा को @TupleConstructor
के साथ एनोटेट करने का प्रयास किया लेकिन इससे कोई फर्क नहीं पड़ता। मुझे एहसास है कि मैं नक्शा कन्स्ट्रक्टर स्वयं जोड़ सकता हूं, उदा।
public Foo(Map map) {
map?.each { k, v -> this[k] = v }
}
हालांकि निर्माता ऊपर डिफ़ॉल्ट नक्शा निर्माता के समान नहीं है, क्योंकि मानचित्र में एक महत्वपूर्ण है कि कक्षा में एक इसी संपत्ति नहीं है एक अपवाद का कारण होगा।
यह संभावना क्लीनर विकल्प है। –
यह काम करने के लिए हुआ क्योंकि 'फू' को मूल 'ऑब्जेक्ट' कक्षा से डिफ़ॉल्ट नो-Arg कन्स्ट्रक्टर प्राप्त होता है। यदि बेस क्लास में नो-एर्ग कन्स्ट्रक्टर नहीं है तो यह टूट जाएगा, और बेस क्लास में कई कन्स्ट्रक्टर ओवरलोड होने पर यह कन्स्ट्रक्टर स्पेस को प्रदूषित करेगा। @ विल का जवाब जाने का सही तरीका है। –