有啥作用?意思是“格式(列表<?扩展 NameValuePair>”
Posted
技术标签:
【中文标题】有啥作用?意思是“格式(列表<?扩展 NameValuePair>”【英文标题】:What does the ? mean in "format(List<? extends NameValuePair>"有什么作用?意思是“格式(列表<?扩展 NameValuePair>” 【发布时间】:2011-11-07 12:18:14 【问题描述】:我正在按照this 帖子上的指示为 Http GetMethod (http://some.domain/path?param1=value1¶m2=value2) 创建参数化 URI,但遇到了一个新问题。
我有这个代码:
List<NameValuePair> params = new ArrayList<NameValuePair>();
...
some code which does: params.add(new BasicNameValuePair(paramName, paramValue));
...
String paramString = URLEncodedUtils.format(params, "utf-8");
但是,我的 Eclipse 说 URLEncodeUtils.format 不接受类型List<NameValuePair>
,而只接受List<? extends NameValuePair>
。
我认为这可能意味着只接受一个子类(但我认为这没有任何意义,因为 NameValuePair 不是抽象的)但我也尝试过这样做,但没有运气:
class NameValuePairExtension extends NameValuePair
List<NameValuePairExtension> params = new ArrayList<NameValuePairExtension>();
这到底是什么意思?
编辑:
感谢您的快速回复。
来自理论repsonses的一部分,我刚刚找到了“实际解决方案”: NameValuePair 是一个接口,因此它的格式不能与它一起使用,并且需要一个实现。
因此,解决方案是将NameValuePair替换为BasicNameValuePair,实现第一个。
但是,我仍然觉得这个“扩展”有点令人困惑。
【问题讨论】:
我想我们已经在 SO 上回答了许多泛型问题,不是吗? :p 如果是这种情况,我很抱歉。我试图搜索帖子,但我什么也没找到。也许是“?”使搜索失败,并且仅针对“扩展”进行搜索会导致许多其他问题 【参考方案1】:这意味着它是一个某种类型的列表,它扩展了NameValuePair
(或是NameValuePair
),但我们不知道是什么类型,我们也不知道'不在乎。
这是 Java 泛型中的一个通配符。有关详细信息,请参阅Java Generics FAQ。
编辑:我的猜测是您使用了错误的 NameValuePair
类型。请发布确切编译错误,它可能会变得更清楚......
【讨论】:
感谢您的评论。但是,在这种情况下,这些事情都不起作用:NameValuePair 和扩展都没有。但是,我刚刚意识到 NameValuePair 是一个接口,所以这可能是失败的原因 @Carles:你确定你的NameValuePair
类型正确吗?
感谢您的提示。但是,我已经找到了确切的问题并编辑了最初的问题以包含它
@Carles: format
应该与List<NameValuePair>
完全匹配。我不认为问题出在你认为的地方......【参考方案2】:
Xxx<? extends Yyy>
表示Xxx
有一个泛型类型参数,当它实现接口Yyy
(如果Yyy
是一个接口)或扩展类Yyy
(如果Yyy
是一个类)。
【讨论】:
感谢您的回复!我刚刚在 Jon's Answer 中发表了评论:我刚刚意识到 NameValuePair 是一个接口,所以原因可能是缺乏实现,无论是不是扩展。以上是关于有啥作用?意思是“格式(列表<?扩展 NameValuePair>”的主要内容,如果未能解决你的问题,请参考以下文章