Что это ?значит в "формате (список" - PullRequest
1 голос
/ 31 августа 2011

Я следую указаниям на этой записи, чтобы создать параметризованный URI для Http GetMethod (http://some.domain/path?param1=value1&param2=value2), и я столкнулся с новой проблемой.

У меня есть этот код:

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>();

Что именно это значит?

EDIT:

Спасибо за ваши быстрые ответы.

Часть теоретических откликов, я только что нашел «практическое решение»: NameValuePair является интерфейсом, поэтому его формат не работает с ним и требует реализации.

Поэтому решение состоит в том, чтобы заменить NameValuePair на BasicNameValuePair, которая реализует первый.

Тем не менее, я все еще нахожу это "расширяет" немного запутанным.

Ответы [ 2 ]

2 голосов
/ 31 августа 2011

Это означает, что это список некоторого типа , который расширяет NameValuePair (или - это NameValuePair), но мы не знаем, какой тип, и нам все равно.

Это подстановочный знак в шаблонах Java.Подробнее см. Общие вопросы Java .

РЕДАКТИРОВАТЬ: Я предполагаю, что вы используете неправильный тип NameValuePair.Пожалуйста, опубликуйте точную ошибку компиляции, и она может проясниться ...

2 голосов
/ 31 августа 2011

Xxx<? extends Yyy> означает, что Xxx имеет параметр общего типа, который может быть любым, пока вы реализуете интерфейс Yyy (если Yyy - это интерфейс) или расширяет класс Yyy (если Yyy - этокласс).

...