簡體   English   中英

Java兩種方法之間的區別(泛型)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM