Я пытаюсь понять метод, который я прочитал в существующем приложении для Android. Объявление метода выглядит следующим образом:
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) {
Я просто читал о дженериках, поэтому я более или менее понимаю, что здесь происходит, но не совсем. Поэтому у меня есть два вопроса:
<V, T extends Result>
? Насколько я понимаю, это место должно всегда описывать возвращаемый тип метода, но он уже говорит о void
позади него, плюс, он говорит как V
и T
Может ли кто-нибудь дать пример того, как назвать этот метод?
Я разделил его на более мелкие секции, чтобы его было легче понять. В разделе:
protected <V, T extends Result> void
<V, T extends Result>
– необязательный раздел (обычно его нет) и используется для указания типичных типов (или неизвестных типов объектов). Это обозначается символом <
и >
и что любое разделенное запятыми значение представляет собой отдельный объект (объект 'T' должен продлить результат).
Это означает, что позже в вызове метода:
... postObject(final V input,...
Этот вход имеет тип объекта V, а это означает, что он может быть любым объектом, который вы хотите.
РЕДАКТИРОВАТЬ
Основным примером вызова этого метода будет:
//Now post it postObject("my input object", null /*Your result class*/, null /*your endpoint*/, true, 0, null /*your loaderProvider*/, null /*your callbacks*/);
Лучший способ думать о разделе <V, T extends Result>
этого определения метода должен был бы рассматривать это как объявление общих параметров, которое будет содержаться в самой сигнатуре метода. Это определение позволяет вам убедиться, что ваши параметры произошли от определенного типа (в вашем примере T
должен быть подклассом Result
), а также позволяет вашей подписи не задыхаться, когда упоминаются T
и V
Что касается ваших вопросов:
input
может просто быть объектом любого типа <V, T extends Result>
просто означает, что у вас будет два общих параметра, которые используются в вашей сигнатуре метода, где любой параметр V
может быть объектом любого типа, и любой параметр T
должен быть подклассом Result