scalaで型パラメータをscalaのクラスで渡してもJavaのクラスになるのはなぜ？


お世話になっております． scalaの初心者です．以下のコード動作の理由が分からず悩んでいます．

[code]

    scala> case class MyVector[A]() {
      def test(init:A) = {
        println("type=" + init.getClass)
      }
    }
    scala> (new MyVector[Int]()).test(3)
    type=class java.lang.Integer
    
[/code]

Intを渡したのでIntegerじゃなくてIntになって欲しいのですが．．．

よろしくお願い致します．




JVM の仕組みに拠ります。

まず大前提として JVM では プリミティブ型 を型パラメータに指定できません。 そのため Java では型パラメータとして `int` を指定すると、
コンパイル時に自動的に、`int` に対応する非プリミティブ型である `Integer` に置き換えています。

JVM を用いる Scala においても、この前提は覆せません。 よって例示されたコードにおいて `A` (=`init.getClass`) は
`Int` ではなく `Integer` となります。

