如果不将其用作参数,方法前面的类型参数有什么作用?

What does the type parameter in front of method do if not using it as parameter?

如果我们有抽象方法

public abstract class Test {
  public abstract <T> void method();
}

然后所有派生的具体 类 都被迫在其方法签名中包含 <T>

public class Test1 extends Test {
    public <T> void method() {
        // some code
    }
}

这个有什么用例?我们可以用 T 做什么? T 是如何得出推论的?

在这种情况下没有理由使用泛型参数,但 java 规范不禁止它。

只是有人犯了那个错误。

编辑

PS:我发现泛型参数不在方法签名中但仍然有用的情况。 (感谢@JimmyB 的想法)

假设您有两个接口:

interface A {}

interface B {}

还有两个带有下一个签名的方法:

<T extends A & B> T f1();

<T extends A & B> void f2(T t);

那么你可以有这样的方法:

<T extends A & B> void foo() {
    T t = f1();
    f2(t);
}

这不完全是有问题的方法,因为它对泛型参数有限制,但它是我能得到的最接近的方法。