ScalaでasInstanceOf[Array[_]]

JVMでArrayが特別扱い、というのを隠蔽できてない好例?
0
Toshiyuki Takahashi @tototoshi

List("1", "2", "3").asInstanceOf[Array[Int]].apply(1) だと ClassCastException で ….asInstanceOf[Array[_]].apply(1) だと MatchError になるのわからない。

2013-11-16 21:57:46
Kenji Yoshida @xuwei_k

@tototoshi 「Array[_]型にキャストする」という操作をJVMのバイトコードにできないという感じだろうか。List("1", "2", "3").asInstanceOf[Array[_]]だけやると、エラーにさえならない(つまり、この時点では実質なにもしてない?)

2013-11-16 22:10:15
Toshiyuki Takahashi @tototoshi

@xuwei_k やっぱり望まれる動きではない感じですか。List("1", "2", "3").asInstanceOf[Array[_]] が res0: Array[_] = List(1, 2, 3) とかなっちゃうし。

2013-11-16 22:14:16
Kenji Yoshida @xuwei_k

@tototoshi そもそもJavaだとArray[AnyRef]へキャストなら可能だけど、Array[_]にキャストって不可能なはず(?)だし、あまり使い道なさそうだしArray[_]へのキャスト禁止でもいいような

2013-11-16 22:18:01
Kenji Yoshida @xuwei_k

@tototoshi ①Array[_]型へキャストは実質なにもしない(できない)②Array[_]型のapply呼び出しは普通に呼べないので、これ https://t.co/UWHHXsRX7R が呼ばれる③この中ではArray以外を考慮してないので、MatchError発生

2013-11-16 22:30:52