以下两个方法签名有什么区别:
public static void test<T>()
对比
public static void test(Type t)
我知道第二个允许将类型传递给方法,但我不清楚第一个的具体做法有何不同。
以下两个方法签名有什么区别:
public static void test<T>()
对比
public static void test(Type t)
我知道第二个允许将类型传递给方法,但我不清楚第一个的具体做法有何不同。
对于前者,您的类型必须在编译时已知,并且您将能够在方法中使用“T”作为类型名称的替代,例如变量声明或强制转换,就好像您正在编写普通代码一样.
对于后者,类型可能直到运行时才知道,但您将不得不使用反射或动态对象来完成某些使用泛型更容易(并且类型安全)的事情。
第一个需要在编译时指定类型(T),并且是一个泛型方法。
第二个允许您在运行时指定类型,并且是非泛型方法。
第一个是通用方法。这意味着很多事情:
该类型在编译时解析。您可以调用test<int>
or test<String>
,但不能test<t>
使用t
变量调用。
由于类型是在编译时解析的,因此您可以在方法的其他部分使用此类型,例如作为返回类型、作为参数的类型或作为方法内部变量的类型。例子:
public static T test<T>(T param) { ... }
int x = test(myString); // Causes a compile-time error