これを Int ではなく Int にキャストするにはどうすればよいですかSome(Int)
val a: Option[Any] = Some(1)
私は試しtoInt
てみましたが、エラーが発生しましたvalue toInt is not a member of Option[Any]
これを Int ではなく Int にキャストするにはどうすればよいですかSome(Int)
val a: Option[Any] = Some(1)
私は試しtoInt
てみましたが、エラーが発生しましたvalue toInt is not a member of Option[Any]
できますa.get.asInstanceOf[Int]
が、安全ではありません。より良い方法は、型情報を保持することです。つまり、のOption[Int]
代わりにを使用しOption[Any]
ます。その場合、結果を でキャストする必要はありませんasInstanceOf
。
val a:Option[Int] = Some(1)
val i = a.get
が例外である場合は例外がスローされるget
ため、直接使用することは安全ではありません。したがって、使用する方が安全です。または、パターン マッチング onを使用して値を取得することもできます。Option
None
getOrElse
a
val a:Option[Any] = Some(1) // Note using Any here
val i = (a match {
case Some(x:Int) => x // this extracts the value in a as an Int
case _ => Int.MinValue
})
使用.asInstanceOf
方法
a.getOrElse(0).asInstanceOf[Int]
これは安全でないキャストであることに注意する必要があります。Option に Int が含まれていない場合、実行時例外が発生します。
キャストできないのは、キャストする必要がないからです。静的型付けプログラミング言語では、ある型と別の型の間で手動でキャストできますが、私ができる最善の提案は、この機能を忘れることです。
特に、各プログラミング言語を最大限に活用したい場合は、適切なユーザーを作成するようにしてください。言語が使用法に合わない場合は、別のもの (動的に型付けされたものなど) を選択してください。
キャストを行うと、潜在的なコンパイル時エラー (解決が容易なため好ましい) が、実行時に発生するため好ましくない ClassCastException に変わります。Scala でキャストを使用する必要がある場合は、不適切なパターンを使用している可能性が非常に高くなります。