新しいリフレクション ライブラリを使用してバイトコードに保存された完全な型シグネチャ (パラメータ化された型が削除されたもの) を表示することは可能ですか?
たとえば、タイプ
Any => Unit
として表示する必要があります
"scala.Function1<java.lang.Object,scala.runtime.BoxedUnit>"
それはバイトコードに格納されている型だからです。このタイプは で表示できjavap
ます。最初に、次のコードを使用してコンパイルする必要がありますscalac
。
object X {
def m(f: Any => Unit) = f
}
コマンドは次javap -c -s -l -verbose X$
を示します。
...
const #25 = Asciz (Lscala/Function1<Ljava/lang/Object;Lscala/runtime/BoxedUnit;>;)Lscala/Function1<Ljava/lang/Object;Lscala/runtime/BoxedUnit;>;;
...
public scala.Function1 m(scala.Function1);
Signature: (Lscala/Function1;)Lscala/Function1;
...
の出力javap
は少し奇妙ですが、「Java のような」出力を取得することにもっと興味があります。おそらく、型シグネチャを表す文字列は、この文字列を簡単に生成できるより優れた型です。
もう一つの例:
package abc
object O {
def x(i: Int)(j: Int) = i+j
}
// type of x should be displayed something like
"int abc.O$.x(int, int)"
このようなものはすでにサポートされていますか?