Java:泛型方法或泛型类

Java:泛型方法或泛型类,java,generics,Java,Generics,我看到这个签名探索了一个库实现: public final class QueryResults<T> { public static <T> QueryResults<T> emptyResults() { return (QueryResults<T>) EMPTY; }; } 公共最终类查询结果{ 公共静态QueryResults emptyResults(){ 返回(查询结果)为空; }; } 我不太明白

我看到这个签名探索了一个库实现:

public final class QueryResults<T> {
    public static <T> QueryResults<T> emptyResults() {
        return (QueryResults<T>) EMPTY;
    };
}
公共最终类查询结果{
公共静态QueryResults emptyResults(){
返回(查询结果)为空;
};
}
我不太明白:

  • T
    已经声明到类定义中时,为什么要将
    T
    再次声明到函数签名中
  • 为什么方法返回
    而不是
    T

  • 由于类型擦除,泛型仅在编译时应用于类的实例<代码>查询结果作为静态标识符无效

    因此,要创建使用类型参数的静态方法,必须在方法上声明类型参数,从而创建泛型方法


    是类型参数的声明,而不是返回类型(返回类型是
    QueryResults
    )。

    这些
    T
    具有不同的范围。类声明中的一个扩展到类的实例上。静态方法中的方法仅扩展到方法签名和方法体。 您可以为这些类型变量使用不同的名称,以避免混淆


    关于问题的第二部分:该方法不返回
    。它返回一个
    QueryResults
    。前者更确切地说是类型变量

    “由于类型擦除”的声明,是因为那个么做的吗?这不是因为
    t
    属于实例,因此在静态上下文中不可用吗?@AndyTurner:但是
    t
    属于实例的唯一原因是类型擦除。例如,在没有类型擦除的C#中,
    QueryResults
    是每个
    T
    的单独类型,并且每个
    T
    具有不同的静态。