3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Scala版のEnumを調査した

Last updated at Posted at 2018-03-04

JavaでEnumをよく使うがScala版はよくわからなかったのでメモ

/*
 * 指定した曜日コードからcodeとnameをタプル形式で取得する
 */
object EnumWeek extends App {
  (1 to 5).toList.foreach(a => println( Week.code(a) ) )
}

結果は、英語と日本語で曜日が取れた。

(monday,月曜日)
(tuesday,火曜日)
(wednesday,水曜日)
(thursday,木曜日)
(friday,金曜日)

Enumは以下リンクのサイト参考。

trait EnumLike {
  type Value
  def value: Value
}
trait Enum[T] extends EnumLike {
  type Value = T
}
trait EnumCompanion[A <: EnumLike] {
  def values: Seq[A]
  def valueOf(value: A#Value): Option[A] = values.find(_.value == value)
}
abstract sealed class WeekType[T](val value: Int) extends Enum[Int]{
  def code: T 
  def name: T 
}
object Week extends EnumCompanion[WeekType[String]]{
  case object MONDAY extends WeekType[String](1){
    override def code = "monday"
    override def name = "月曜日"}
  case object TUESDAY extends WeekType[String](2){
    override def code = "tuesday"
    override def name = "火曜日" }
  case object WEDNESDAY extends WeekType[String](3){
    override def code = "wednesday"
    override def name = "水曜日" }
  case object THURSDAY extends WeekType[String](4){
    override def code = "thursday"
    override def name = "木曜日" }
  case object FRIDAY extends WeekType[String](5){
    override def code = "friday"
    override def name = "金曜日" }
  lazy val values = Seq(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY)
  def code(cd:Int): (String, String) = {
    (valueOf(cd).map(_.code).getOrElse(""), valueOf(cd).map(_.name).getOrElse(""))
  }
}

参考:
https://gist.github.com/gakuzzzz/4ad53153e28b3a6e0aa6

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?