प्रकार के साथ एक चर को देखते हुए Graphics
, मैं इसे Graphics2D
स्काला में कैसे डालूं?
प्रकार के साथ एक चर को देखते हुए Graphics
, मैं इसे Graphics2D
स्काला में कैसे डालूं?
जवाबों:
पसंदीदा तकनीक पैटर्न मिलान का उपयोग करना है। यह आपको इनायत से इस मामले को संभालने की अनुमति देता है कि विचाराधीन मूल्य दिए गए प्रकार का नहीं है:
g match {
case g2: Graphics2D => g2
case _ => throw new ClassCastException
}
यह ब्लॉक asInstanceOf[Graphics2D]
विधि के शब्दार्थ को दोहराता है , लेकिन अधिक लचीलेपन के साथ। उदाहरण के लिए, आप एक ही समय में कई सशर्त जातियों को प्रभावी ढंग से निष्पादित करते हुए, विभिन्न प्रकारों के लिए विभिन्न शाखाएं प्रदान कर सकते हैं। अंत में, आपको वास्तव में कैच-ऑल क्षेत्र में एक अपवाद को फेंकने की आवश्यकता नहीं है , आप वापस भी लौट सकते हैं null
(या अधिमानतः None
), या आप कुछ कमबैक शाखा में प्रवेश कर सकते हैं जो बिना काम करता है Graphics2D
।
संक्षेप में, यह वास्तव में जाने का रास्ता है। यह थोड़ा अधिक वाक्यात्मक रूप से भारी है asInstanceOf
, लेकिन जोड़ा लचीलापन लगभग हमेशा इसके लायक है।
base match { case base @ MyConcrete(value) => base.something(value) }
जाहिर है, शैडोइंग base
वैकल्पिक है। आप आसानी से एक भिन्न चर नाम का उपयोग कर सकते हैं।
val gResult = g match { case g2: Graphics2D => g2 case _ => throw new ClassCastException }
g.asInstanceOf[Graphics2D];
asInstanceOf
, क्योंकि यह स्थैतिक प्रकार की प्रणाली के उद्देश्य को हरा देता है और yucky लगता है।
scala-swing
घटकों का उपयोग करते हैं, तो पेंटकम्पोनेंट का पैरामीटर पहले से ही ग्राफिक्स 2 डी है, इसलिए किसी भी कलाकार की आवश्यकता नहीं है