パラメトリックバージョンを使用すると、
- 関数のユーザーへの詳細情報
- 作成できるプログラムの数を制限します(無料のバグチェック)
ランダムな例として、二次方程式の根を計算する方法があるとします
int solve(int a, int b, int c) {
// My 7th grade math teacher is laughing somewhere
}
そして、あなたはそれ以外のもののような他の種類の数でそれが働いて欲しいですint
。次のように書くことができます
Num solve(Num a, Num b, Num c){
...
}
問題は、これはあなたがそれを望んでいることを言っていないということです。それは言う
数字のようなものを3つ(必ずしも同じ方法である必要はありません)教えてください。何らかの数字を返します。
私たちは次のような何かを行うことができないint sol = solve(a, b, c)
場合はa
、b
、とc
しているint
私たちは、メソッドが返すために起こっていることを知らないので、Sをint
最後に!これは、より大きな表現でソリューションを使用したい場合、ダウンキャスティングと祈りを伴ういくつかの厄介なダンスにつながります。
関数内で、誰かがfloat、bigint、degreeを渡してくれる可能性があり、それらを加算および乗算する必要があります。これらの3つのクラス間の操作は意味をなさないため、静的にこれを拒否します。度はmod 360であるため、そうではなくa.plus(b) = b.plus(a)
、同様の喜びが生じるでしょう。
サブタイプ付きのパラメータポリモーフィズムを使用する場合、このタイプは実際に私たちが意味することを言うので、これをすべて除外できます
<T : Num> T solve(T a, T b, T c)
または、「数であるタイプを教えてくれれば、それらの係数を使って方程式を解くことができます」。
これは、他の多くの場所でも発生します。例のもう一つの良いソースは、コンテナ、ALAのいくつかの並べ替えの上に抽象的機能でありreverse
、sort
、map
など、