代码之家  ›  专栏  ›  技术社区  ›  skip

为什么静态泛型方法的返回类型之前需要类型参数

  •  4
  • skip  · 技术社区  · 6 年前

    以下 noGood 方法给出一个编译错误,因为它在返回类型之前立即省略了形式类型参数 T .

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

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

    4 回复  |  直到 6 年前
        1
  •  5
  •   Mureinik    6 年前

    类型参数( T )当你 实例化 全班同学。因此,实例方法不需要类型参数,因为它是由实例定义的。

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

        2
  •  2
  •   Andrew    6 年前

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

    public static <T> T noGood(T t) {
        return t;
    }
    
        3
  •  2
  •   azro    6 年前

    当使用generic时,需要声明它们,使用 <> 记数法

    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) {
          ...
      }
      
        4
  •  1
  •   John Humphreys    6 年前

    首先,这在语言上是相当标准的。即使在C++中:

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

    在泛型函数上方声明类型参数。

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

    推荐文章