Ответ 1
Вероятно, вы просматриваете код, скомпилированный в Vec.class. Согласно этой теме специализация происходит в подклассах. Это можно проверить в REPL:
scala> class Vec[@specialized A] ( ary: Array[A] ) {
| def apply( i: Int ) = ary(i)
| }
defined class Vec
scala> new Vec( Array[Int](1) ).getClass
res0: java.lang.Class[_ <: Vec[Int]] = class Vec$mcI$sp
Как вы можете видеть для Int
, он использует подкласс Vec$mcI$sp
. И если вы запустите javap в этом классе, вы увидите, что это инфанкт, специализирующийся на коде. Вот как выглядит метод apply в Vec$mcI$sp.class
с помощью javap:
public int apply(int);
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: iload_1
2: invokevirtual #13 // Method apply$mcI$sp:(I)I
5: ireturn
Я полагаю, это то, что вы хотите при использовании Int
.