以下代码对我来说非常混乱。
public class Test<T> {
public static <T> Test<T> ok(T result) {
..
我理解班级名称中的泛型。我能理解“ok”方法是否会像这样
public static Test<T> ok(T result) {
或者
public static T ok(T result) {
但为什么会有额外的&lt; T>在测试之前&lt; T>返回类型我不明白。
答案 0 :(得分:5)
该示例实际上等同于
public class Test<T> {
public static <U> Test<U> ok(U result) {
..
另一个<T>
指的是仅适用于该方法的不同泛型类型。为避免混淆,最好为不同的事物使用不同的名称。
答案 1 :(得分:2)
它是静态方法,因此它不受实例的泛型类型参数的影响。
如果您希望200 200
方法受泛型参数的约束,则必须将ok
类作为工厂制作,只对TestFactory<T>
类型进行测试,例如的是:
T
因此,在这种情况下,public class TestFactory<T> {
public Test<T> ok(T result) {
// ...
}
}
仅允许TestFactory<String>
结果,其他任何内容都是编译器错误。
如果你更喜欢静态方法,你应该做@jurez发布的内容以避免混淆:事实上,这个静态方法的类型参数只取决于给定输入参数的类型。