考虑类层次结构
public class A {
public void say() {
System.out.println("I am A");
}
}
和
public class B extends A {
public void say() {
System.out.println("I am B");
}
}
在第三节课中,我有两种不同的方法
private static void print(A input) {
}
private static <T extends A> void print2(T input) {
}
他们之间的“差异”是什么?
我可以使用A
的实例和A
的所有子类调用它们:
public class Test {
private static void print(A input) {
input.say();
}
private static <T extends A> void print2(T input) {
}
public static void main(String[] args) {
B b = new B();
print(b);
print2(b);
}
}
感谢您的帮助!
P.S。:
之间的区别private static void print(java.util.List<A> input) {
}
private static <T extends A> void print2(java.util.List<T> input) {
}
很清楚!
答案 0 :(得分:4)
从实际的原因来看,那里没有那么大的区别。 您可以通过
调用第二种方法<B>test2(new B());
当你尝试使用A
时会失败<B>test2(new A()); //Compile error
虽然这对它没有大的用处。
然而: 例如,通用声明确实会出现添加返回类型。
public void <T extends A> T test2(T var) {
//do something
return var;
}
您可以致电:
B b = new B();
B b2 = test2(b);
虽然在没有泛型的情况下调用类似的方法会需要强制转换。