つまり、たとえばC#では、次のようなジェネリックメソッドを記述できます。
public static void Concatenate<T> (T arg1, T arg2)
{
Console.WriteLine(arg1.ToString() + arg2.ToString());
}
次に、これらのさまざまな方法でメソッドを呼び出すと、次のようになります。
Concatenate("one", "two"); // will work just fine, outputs "onetwo"
Concatenate(1, 2); // will also work great, outputs 12
Concatenate("one", 2) // will give a compiler error
あるいは、次のようにメソッドを呼び出すこともできますConcatenate<string>("one", "two");
。文字列のみが入力されることを確認してください。
今、Javaでまったく同じことを試してみると
public static <T> void concatenate(T arg1, T arg2) {
System.out.println(arg1.toString() + arg2.toString());
}
そして、c#の例とまったく同じ方法でメソッドを呼び出します。
concatenate("one", "two"); // will work just fine, outputs "onetwo"
concatenate(1, 2); // will also work great, outputs 12
concatenate("one", 2) // will work fine and outputs "one2"
私の知る限り、このようなメソッドを呼び出すことはできませconcatenate<String>("One", "Two");
ん。エラーが発生します。
C#で見つけたそのような型安全性を追加する方法はありますか?
だから私はどちらかの場所にどんなタイプでも入れることができて警告を受け取るだけであるという危険を冒さない...
より良い例は、可変引数を使用することです
C#で私はします:
public static void QuickSort<T>(params T[] args) // same as (T... args) in java
{
// code
}
そして、それを呼び出すと、たとえば次のようなことを行うことによって、1種類のパラメーターのみが取得されることを確認します。
QuickSort<int>(5, 9, 7, 3, 2, 5, 4, 1);
一方、Javaではこれを行うことができます:
quickSort(5, "nine", 7, 3, "two", 5, 4, 1);
そして、IDEから警告を受け取るだけですが、C#ではエラーが発生します
QuickSort<int>(args)
だから私の質問は、Javaではなくc#、a-laのようにパラメータタイプを「ロック」できる方法はありますquickSort(args)
か?