[英]Java difference between two methods (generics)
考慮類的層次結構
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);
}
}
謝謝您的幫助!
PS:兩者之間的區別
private static void print(java.util.List<A> input) {
}
private static <T extends A> void print2(java.util.List<T> input) {
}
清楚了!
出於實際原因,兩者之間並沒有太大區別。 您可以通過調用第二種方法
<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);
而調用沒有泛型的類似方法則需要強制轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.