0

以下两个方法签名有什么区别:

public static void test<T>()

对比

public static void test(Type t)

我知道第二个允许将类型传递给方法,但我不清楚第一个的具体做法有何不同。

4

3 回答 3

3

对于前者,您的类型必须在编译时已知,并且您将能够在方法中使用“T”作为类型名称的替代,例如变量声明或强制转换,就好像您正在编写普通代码一样.

对于后者,类型可能直到运行时才知道,但您将不得不使用反射或动态对象来完成某些使用泛型更容易(并且类型安全)的事情。

于 2012-10-29T16:42:51.347 回答
2

第一个需要在编译时指定类型(T),并且是一个泛型方法。

第二个允许您在运行时指定类型,并且是非泛型方法。

于 2012-10-29T16:42:25.710 回答
1

第一个是通用方法。这意味着很多事情:

  • 该类型在编译时解析。您可以调用test<int>or test<String>,但不能test<t>使用t变量调用。

  • 由于类型是在编译时解析的,因此您可以在方法的其他部分使用此类型,例如作为返回类型、作为参数的类型或作为方法内部变量的类型。例子:

    public static T test<T>(T param) { ... }
    
    int x = test(myString);   // Causes a compile-time error
    
于 2012-10-29T16:43:33.077 回答