Türü Graphics
olan bir değişken göz önüne alındığında , bunu Graphics2D
Scala'da nasıl kullanırım?
Türü Graphics
olan bir değişken göz önüne alındığında , bunu Graphics2D
Scala'da nasıl kullanırım?
Yanıtlar:
Tercih edilen teknik, desen eşleşmesini kullanmaktır. Bu, söz konusu değerin verilen türden olmadığı durumu ele almanızı sağlar :
g match {
case g2: Graphics2D => g2
case _ => throw new ClassCastException
}
Bu blok, asInstanceOf[Graphics2D]
yöntemin anlambilimini , ancak daha fazla esneklikle çoğaltır . Örneğin, çeşitli koşullar için farklı dallar sağlayabilir, aynı anda birden fazla koşullu yayın gerçekleştirebilirsiniz. Son olarak, tümünü yakalama alanına gerçekten bir istisna atmanız gerekmez, ayrıca geri dönebilirsiniz null
(veya tercihen None
) veya olmadan çalışan bir yedek dal girebilirsiniz Graphics2D
.
Kısacası, bu gerçekten gitmenin yolu. Sözdizimsel olarak biraz daha hantal asInstanceOf
, ancak eklenen esneklik neredeyse her zaman buna değer.
base match { case base @ MyConcrete(value) => base.something(value) }
Şunu deneyin: Açıkçası, gölgeleme base
isteğe bağlıdır. Farklı bir değişken adını da kolayca kullanabilirsiniz.
val gResult = g match { case g2: Graphics2D => g2 case _ => throw new ClassCastException }
g.asInstanceOf[Graphics2D];
asInstanceOf
alıştıktan sonra, statik tip sisteme sahip olma amacını yitirdiği ve yucky hissettiği için kullanmamayı öğrendim .
scala-swing
bileşenler kullanıyorsanız, paintComponent parametresi zaten Graphics2D olduğundan döküm gerekmiyor