Java 如果不使用方法前面的类型参数作为参数,它会做什么?

Java 如果不使用方法前面的类型参数作为参数,它会做什么?,java,generics,type-parameter,Java,Generics,Type Parameter,如果我们有一个抽象的方法 public abstract class Test { public abstract <T> void method(); } 然后,所有具体的派生类都必须在其方法签名中包含: public class Test1 extends Test { public <T> void method() { // some code } } 这个用例是什么?我们能用T做什么?在这种情况下,没有理由使用泛型参数,但

如果我们有一个抽象的方法

public abstract class Test {
  public abstract <T> void method();
}
然后,所有具体的派生类都必须在其方法签名中包含:

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

这个用例是什么?我们能用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);
}

这并不完全是问题中的方法,因为它对泛型参数有约束,但它与我所能得到的最接近。

请注意,类型参数仍然可以在方法内部使用,以或多或少确保多个局部变量具有相同的表观类型。嗯,不太确定这是否是正确的答案。但是没有比这个更好的了。@JimmyB是的,但是它没用,因为你总是可以识别它们的类型。此外,您不能将以下内容分配给这些变量: