1

我正在按照这篇文章中的指示为 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>();

这到底是什么意思?

编辑:

感谢您的快速回复。

从理论上的回答中,我刚刚找到了“实际解决方案”:NameValuePair 是一个接口,因此它的格式不能与它一起使用,并且需要一个实现。

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

但是,我仍然觉得这个“扩展”有点令人困惑。

4

2 回答 2

2

Xxx<? extends Yyy>意味着它有一个泛型类型参数,当它实现接口(如果是接口)或扩展类(如果是类)Xxx时,它可以是任何你想要的。YyyYyyYyyYyy

于 2011-08-31T10:32:14.137 回答
2

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

这是 Java 泛型中的通配符。有关更多详细信息,请参阅Java 泛型常见问题解答

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

于 2011-08-31T10:32:27.433 回答