如果我们有抽象方法
public abstract class Test {
public abstract <T> void method();
}
然后所有具体派生类都被强制在其方法签名中使用<T>
:
public class Test1 extends Test {
public <T> void method() {
// some code
}
}
这是什么用例?我们可以对T
做些什么? T
如何从中得到推论?
答案 0 :(得分:1)
在这种情况下,没有理由使用泛型参数,但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);
}
这不是确切的方法,因为它对泛型参数有约束,但它尽可能接近。
答案 1 :(得分:-2)
在这种情况下,泛型的使用仅定义方法的返回。虽然为此你应该在Test类的扩展名定义中传递Object
public class Test1 extends Test<Object1> {
public Object1 void method() {
// some code
}
}
public class Test1 extends Test<Object2> {
public Object2 void method() {
// some code
}
}