【发布时间】:2019-02-14 23:50:20
【问题描述】:
以下noGood 方法会产生编译错误,因为它忽略了紧接在返回类型T 之前的形式类型参数。
public static T noGood(T t) {
return t;
}
有人可以帮我理解为什么静态泛型方法需要在返回类型之前有一个类型参数吗?非静态方法不需要吗?
【问题讨论】:
标签: java generics methods static generic-method
以下noGood 方法会产生编译错误,因为它忽略了紧接在返回类型T 之前的形式类型参数。
public static T noGood(T t) {
return t;
}
有人可以帮我理解为什么静态泛型方法需要在返回类型之前有一个类型参数吗?非静态方法不需要吗?
【问题讨论】:
标签: java generics methods static generic-method
类型参数 (T) 在您实例化类时声明。因此,实例方法不需要类型参数,因为它是由实例定义的。
另一方面,static 方法不属于实例——它们属于类。由于没有实例可以从中获取类型信息,因此必须为方法本身指定它。
【讨论】:
T 未定义。修饰符的顺序和返回类型保持不变。
public static <T> T noGood(T t) {
return t;
}
【讨论】:
self......
当您使用泛型时,您需要使用<> 表示法声明它们
在课堂上
public class Foo<T, U, V>{
}
在方法中,在返回类型之前
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);
}
您在泛型函数上方声明类型参数。
当它是类的成员函数时,它可以访问类的类型参数。如果它不是静态的,则需要显式声明它们。
【讨论】: