รับตัวแปรพร้อมชนิดGraphics
ฉันจะส่งไปยังGraphics2D
Scala อย่างไร
รับตัวแปรพร้อมชนิดGraphics
ฉันจะส่งไปยังGraphics2D
Scala อย่างไร
คำตอบ:
เทคนิคที่ต้องการคือการใช้การจับคู่รูปแบบ สิ่งนี้จะช่วยให้คุณสามารถจัดการกับกรณีและปัญหาที่เป็นปัญหาอย่างไม่เป็นไปตามประเภทที่กำหนด:
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 ดังนั้นจึงไม่จำเป็นต้องใช้การร่าย