Как я могу привести переменную в Scala? - PullRequest
193 голосов
/ 31 мая 2009

Учитывая переменную с типом Graphics, как я могу привести его к Graphics2D в Scala?

Ответы [ 2 ]

278 голосов
/ 31 мая 2009

Предпочтительным методом является использование сопоставления с образцом. Это позволяет изящно обрабатывать случай, когда рассматриваемое значение равно , а не данного типа:

g match {
  case g2: Graphics2D => g2
  case _ => throw new ClassCastException
}

Этот блок копирует семантику метода asInstanceOf[Graphics2D], но с большей гибкостью. Например, вы можете предоставить разные ветви для разных типов, эффективно выполняя несколько условных приведений одновременно. Наконец, вам не нужно действительно создавать исключение в области всеобщего охвата, вы также можете вернуть null (или, предпочтительно, None), или вы можете ввести некоторую резервную ветку, которая работает без Graphics2D.

Короче говоря, это действительно путь. Синтаксически он немного громче, чем asInstanceOf, но дополнительная гибкость почти всегда стоит.

221 голосов
/ 31 мая 2009
g.asInstanceOf[Graphics2D];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...