2012-04-16 78 views
7

在我的界面:Java泛型 - 類型參數字符串被隱藏String類型

public <T> Result query(T query) 

在我的第一子類:

public <HashMap> Result query(HashMap queryMap) 

在我的第二個亞類:

public <String> Result query(String queryStr) 

第一個子類根本沒有編譯警告,而第二個子類有: 類型參數String隱藏類型字符串?我知道我的參數被泛型類型隱藏。但我想了解究竟發生了什麼?

回答

15

它認爲你正試圖創建一個類型參數 - 一個變量 - 的名字是String。我懷疑你的第一個子類根本不會導入java.util.HashMap

在任何情況下,如果T是你接口的類型參數 - 它有可能應該是 - 那麼你不應該包括在子類中<String>可言。它應該是

public interface Interface<T> { 
    public Result query(T query); 
} 

public class Subclass implements Interface<String> { 
    ... 
    public Result query(String queryStr) { 
    ... 
    } 
} 
+0

作爲一個樣式問題,我建議不要命名一個類型參數'字符串' - 或其他常用的Java類名稱。對於任何後來檢查代碼的人來說,這可能會造成混淆。如果我在Java中看到'String',我認爲它是'java.lang.String'。 – oconnor0 2012-04-16 17:04:10

+1

哦,絕對。儘管如此,我懷疑我在這裏給出的例子是OP_meant_要做的。 – 2012-04-16 17:08:57

+0

您可能還想看看[這個S&O問題](http://stackoverflow.com/questions/10011758/troubleshooting-the-type-parameter-t-is-iding-the-type-t-warning) 。 – 2012-04-16 17:37:23