รับตัวแปรพร้อมชนิดGraphicsฉันจะส่งไปยังGraphics2DScala อย่างไร
รับตัวแปรพร้อมชนิดGraphicsฉันจะส่งไปยังGraphics2DScala อย่างไร
คำตอบ:
เทคนิคที่ต้องการคือการใช้การจับคู่รูปแบบ สิ่งนี้จะช่วยให้คุณสามารถจัดการกับกรณีและปัญหาที่เป็นปัญหาอย่างไม่เป็นไปตามประเภทที่กำหนด:
g match {
case g2: Graphics2D => g2
case _ => throw new ClassCastException
}
บล็อกนี้จำลองความหมายของasInstanceOf[Graphics2D]วิธี แต่มีความยืดหยุ่นมากขึ้น ตัวอย่างเช่นคุณสามารถระบุสาขาที่แตกต่างกันสำหรับประเภทต่างๆได้อย่างมีประสิทธิภาพดำเนินการปลดเปลื้องตามเงื่อนไขหลายอย่างในเวลาเดียวกัน สุดท้ายคุณไม่ได้จริงๆต้องโยนข้อยกเว้นในการจับทุกพื้นที่ที่คุณยังสามารถกลับnull(หรือโดยเฉพาะอย่างยิ่งNone) Graphics2Dหรือคุณอาจจะป้อนสาขาสำรองบางส่วนที่ทำงานได้โดยไม่ต้อง
ในระยะสั้นนี่เป็นวิธีที่จะไปจริงๆ มันมีขนาดใหญ่กว่า syntactically เล็กน้อย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เนื่องจากมันเอาชนะจุดประสงค์ของการมีระบบสแตติกแบบคงที่
scala-swingส่วนประกอบพารามิเตอร์ของ paintComponent นั้นก็คือ Graphics2D ดังนั้นจึงไม่จำเป็นต้องใช้การร่าย