2012-04-16 147 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