簡體   English   中英

Java泛型語法之間的區別?

[英]Difference between Java generics syntax?

這些方法定義有什么區別?

public <T extends Foo> void loadData(Class<T> p_class);

public void loadData(Class<? extends Foo> p_class);

兩個簽名都接受完全相同的參數集,因此在這個意義上是等價的。 正如評論中指出的那樣,在第二種情況下,您將無法在方法體中引用T 但是,根據Effective Java,第二個簽名是首選(因為它更短,更清晰)。 在該書中,給出的建議是使用第二個簽名,如果方法中需要T則使用帶有第一個簽名的私有幫助器方法。 像這樣:

private <T extends Foo> void helper(Class<T> p_class) {
    // code
}

public void loadData(Class<? extends Foo> p_class) {
    helper(p_class);
}

語法用法存在差異,因為第二種方法具有泛型類型參數。

class Bar extends Foo { }

obj.<Bar>loadData(klazz);

這要求klazz完全是Class<Bar>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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