2013-11-27 5 views
3

Я пытаюсь понять метод, который я прочитал в существующем приложении для Android. Объявление метода выглядит следующим образом:Понимание общих методов в Java

protected <V, T extends Result> void postObject(final V input, final T result, final ConnectionTarget endpoint, final boolean restart, final int id, final LoaderProvider provider, final ServiceCallbacks<T> callbacks) { 

Я только что прочитал о дженериков, так что я более или менее понимаю, что здесь происходит, но не совсем. Поэтому у меня два вопроса:

  1. должен быть input типа (т.е. класса), или он должен просто быть объектом любого типа?
  2. Что означает <V, T extends Result>? Насколько я понимаю, это место должно всегда описывать возвращаемый тип метода, но он уже говорит void за ним, плюс, он говорит как V, так и T.

Может ли кто-нибудь привести пример того, как назвать этот метод?

ответ

3

Я разделил его на более мелкие секции, чтобы его было легче понять. В разделе:

protected <V, T extends Result> void 

<V, T extends Result> является необязательным раздела (как правило, не существует) и используется для задания общего типа (или неизвестных типов объектов). Это обозначается < и > и что любое значение, разделенное запятыми, является отдельным объектом (объект «T» должен продлить результат).

Это означает, что позже в вызове метода:

... postObject(final V input,... 

, что вход имеет тип объекта V, а это означает, что она может быть любой объект, который вы хотите.

EDIT

Базовый пример вызова этого метода будет:

//Now post it 
postObject("my input object", null /*Your result class*/, null /*your endpoint*/, true, 0, null /*your loaderProvider*/, null /*your callbacks*/); 
+0

Хорошо, так что, насколько я понимаю, они не являются параметрами, которые должны быть поставлены в этом месте при вызове метода фактического, верно? Не могли бы вы привести пример того, как я могу использовать этот метод? – kramer65

+0

См. Мое редактирование для примера вызова – RocketSpock

+0

Еще одна вещь; ConnectionTarget - это интерфейс.Означает ли это, что объект, который я там установил, должен реализовать интерфейс ConnectionTarget? – kramer65

2

Лучший способ думать о <V, T extends Result> части этого определения метода было бы думать об этом как декларация общих параметров, которые будут содержаться в самой сигнатуре метода. Это определение позволяет вам гарантировать, что ваши параметры происходят из определенного типа (в вашем примере T должен быть подклассом Result), а также позволяет вашей подписи не задыхаться, когда указаны ссылки T и V. Насколько обеспокоены ваши вопросы:

  1. input может просто быть объектом любого типа
  2. <V, T extends Result> просто означает, что вы будете иметь два общие параметры, которые используются в методе подписи, где любой V параметр может быть Объект любого типа и любой T параметра должен быть подклассом Result
Смежные вопросы