繁体   English   中英

为什么在返回类型之前为静态泛型方法键入参数

[英]Why type parameter required before return type for static generic methods

以下noGood方法给出了编译错误,因为它在返回类型T之前省略了正式类型参数。

public static T noGood(T t) {
  return t;
}

有人可以帮我理解为什么静态泛型方法在返回类型之前需要一个类型参数? 非静态方法不需要它吗?

实例化类时声明类型参数( T )。 因此,实例方法不需要类型参数,因为它是由实例定义的。

另一方面, static方法不属于实例 - 它们属于类。 由于没有实例来获取类型信息,因此必须为方法本身指定。

T没有定义。 修饰符的顺序和返回类型保持不变。

public static <T> T noGood(T t) {
    return t;
}

当您使用泛型时,需要使用<>表示法声明它们

  1. 在课堂上

     public class Foo<T, U, V>{ } 
  2. 在一个方法中,返回类型之前

     public static <T, U extends Number, V> T foo(T t) { U u = ..; ... } public static <T> int foo(T t) { ... } 

首先,这是非常标准的语言。 即使在C ++中:

template <class myType>
myType GetMax (myType a, myType b) {
    return (a>b?a:b);
}

您将类型参数声明为泛型函数。

当它是类的成员函数时,它可以访问类的类型参数。 如果它不是静态的,那么你需要明确地声明它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM