0
FastUtilsのようなフレームワークをScalaで使用する場合、フレームワーク自体に特殊なデータ構造があるため、効果的な特殊化に基づいて適切なコードを生成するにはどうすればよいですか?つまり、どのように専門化され、適切なコードを実行するのかをプログラムでどのように把握していますか?だから、そのような場合にパスに関連する型付けをどう扱うのですか? objects
char
については特殊化に基づいてコードパスを実行する方法
class Container[@specialized T](var window: Int) {
val data = new ObjectArrayList[T](window)
}
については
私はそれになりたい:
class Container[@specialized T](var window: Int) {
val data = new CharArrayList(window)
}
しかし、これはT
の専門に基づくべきです。私はこれを置くことになっている場合は、異なるsudoのコードは、おそらく
class Container[@specialized T](var window: Int) {
val data = specialisationOf(T) match {
case "Char" => new CharArrayList(window)
case "Int" => new IntegerArrayList(window)
...
...
...
case _ => new ObjectArrayList[T](window)
}
}
私はすでに手動の専門化を行っています。私は最小限の再定義でそれをしたいと思っています。ありがとうポインタがありますが、これは私が後になっている問題を解決しません。 –
異なる 'ArrayList'型は特別なメソッドを持つ共通のスーパータイプを持っていないので、あなたの質問に書いた方法ではできません。 (ほとんど) 'data'を呼び出すたびに、' match'をもう一度やって、最も具体的な型にキャストしなければなりません。それはおそらく、実行時の手動タイプ比較のオーバーヘッドのボクシングオーバーヘッドを置き換えるだけです。 –