Учитывая переменную с типом Graphics
, как мне передать ее в Graphics2D
в Scala?
Предпочтительным методом является использование сопоставления шаблонов. Это позволяет вам изящно обрабатывать случай, когда указанное значение не относится к данному типу:
g match {
case g2: Graphics2D => g2
case _ => throw new ClassCastException
}
Этот блок реплицирует семантику метода asInstanceOf[Graphics2D]
, но с большей гибкостью. Например, вы можете предоставить разные ветки для разных типов, эффективно выполняя одновременно несколько условных отбросов. Наконец, вам действительно не нужно бросать исключение в область catch-all, вы также можете вернуть null
(или предпочтительно None
), или вы можете ввести некоторую резервную ветвь, которая работает без Graphics2D
.
Короче говоря, это действительно путь. Это немного более синтаксически громоздко, чем asInstanceOf
, но добавленная гибкость почти всегда стоит того.
g.asInstanceOf[Graphics2D];
asInstanceOf
, поскольку он asInstanceOf
необходимость иметь статическую систему типов и чувствует себя отвратительно.