次の 2 つのメソッド シグネチャの違いは何ですか。
public static void test<T>()
対
public static void test(Type t)
2番目のものではメソッドに型を渡すことができることは知っていますが、最初のものとは何が違うのか正確にはわかりません。
次の 2 つのメソッド シグネチャの違いは何ですか。
public static void test<T>()
対
public static void test(Type t)
2番目のものではメソッドに型を渡すことができることは知っていますが、最初のものとは何が違うのか正確にはわかりません。
前者では、コンパイル時に型を認識している必要があり、通常のコードを記述しているかのように、変数宣言やキャストなどの型の名前の代用としてメソッド内で「T」を使用できます。 .
後者の場合、型は実行時までわからない可能性がありますが、リフレクションまたは動的オブジェクトを使用して、ジェネリックを使用するとはるかに簡単 (かつ型安全) な特定のことを達成する必要があります。
最初のものは、コンパイル時に型 (T) を指定する必要があり、ジェネリック メソッドです。
2 つ目は、実行時に型を指定できる、非ジェネリック メソッドです。
最初のものは一般的な方法です。これは多くのことを意味します:
型はコンパイル時に解決されます。test<int>
またはを呼び出すことはできますが、変数としてtest<String>
呼び出すことはできません。test<t>
t
型はコンパイル時に解決されるため、この型をメソッドの他の部分で使用できます。たとえば、戻り値の型、パラメーターの型、またはメソッド内の変数の型として使用できます。例:
public static T test<T>(T param) { ... }
int x = test(myString); // Causes a compile-time error