java - 为什么静态泛型方法的返回类型前面应该有<T>

标签 java generics

为什么泛型静态方法有返回类型,而实例方法没有?

public class Main<T> {
    public  static <T> T met(T t) {
        return t;
    }

    public  T met1(T t) {
        return t;
    }
}

最佳答案

实例方法还可以在返回类型前面定义泛型类型参数 ( <T> ),但这不是必须的,因为它可以使用已在类级别中定义的泛型类型参数 ( public class Main<T> )。

另一方面,静态方法不能使用在类级别定义的泛型类型参数,因此它必须声明它打算使用的任何泛型类型参数。

即以下两项均有效

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

public <T> T met1(T t) {
    return t;
}

另一方面,在下面

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

T 被假定为类型标识符(即某个类或接口(interface)的名称),而不是泛型类型参数。

关于java - 为什么静态泛型方法的返回类型前面应该有<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45657568/

相关文章:

Java 6 : Create a modified copy of file perserving original permission

generics - 在Dart泛型中使用动态

java - 无法将 ModuleInfo 对象添加到 ArrayList<?扩展模块信息>

Java - Eclipse 编译器合规性级别 1.6 未按预期工作

泛型类型绑定(bind)到 Any 时的 kotlin 重载解析歧义

java - 切换到特定 fragment 会产生奇怪的 java.lang.NullPointerException

java - 注意 : com. google.common.cache.Striped64 动态访问声明的字段 'base'

java - 使用后如何清除缓冲区?

java - 我的 for 循环出了什么问题?

java - 不兼容类型 : Class<Bar> cannot be converted to Class<CAP#1> where CAP#1 is a fresh-type variable