如果不将其用作参数,方法前面的类型参数有什么作用?
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);
}
这不完全是有问题的方法,因为它对泛型参数有限制,但它是我能得到的最接近的方法。
如果我们有抽象方法
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);
}
这不完全是有问题的方法,因为它对泛型参数有限制,但它是我能得到的最接近的方法。