那是什么?表示“格式(List <! - ?extends NameValuePair - >”

时间:2011-08-31 10:29:33

标签: java urlencode http-get http-method getmethod

我正在关注this帖子上的指示,为Http GetMethod(http://some.domain/path?param1=value1&param2=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>();

这究竟意味着什么?

编辑:

感谢您的快速回复。

理论上的一部分,我刚刚找到了“实用的解决方案”: NameValuePair是一个接口,因此它的格式无法使用它,并且需要实现。

因此,解决方案是用BasicNameValuePair替换NameValuePair,它实现了第一个。

但是,我仍然认为这种“扩展”有点令人困惑。

2 个答案:

答案 0 :(得分:2)

Xxx<? extends Yyy>表示Xxx具有泛型类型参数,可以在实现接口Yyy(如果Yyy是接口时)或扩展类{ {1}}(如果Yyy是一个类)。

答案 1 :(得分:2)

这意味着它是一个某种类型的列表,它扩展了NameValuePair(或 NameValuePair),但我们不知道什么类型,我们不在乎。

这是Java泛型中的通配符。有关详细信息,请参阅Java Generics FAQ

编辑:我的猜测是你使用了错误的NameValuePair类型。请发布完全编译错误,它可能会变得更清晰......