Türü Graphicsolan bir değişken göz önüne alındığında , bunu Graphics2DScala'da nasıl kullanırım?
Türü Graphicsolan bir değişken göz önüne alındığında , bunu Graphics2DScala'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 baseisteğ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];
asInstanceOfalıştıktan sonra, statik tip sisteme sahip olma amacını yitirdiği ve yucky hissettiği için kullanmamayı öğrendim .
scala-swingbileşenler kullanıyorsanız, paintComponent parametresi zaten Graphics2D olduğundan döküm gerekmiyor