Понимание общих методов в Java

Я пытаюсь понять метод, который я прочитал в существующем приложении для 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) { 

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

  1. Должен вводиться тип (т.е. класс) или должен быть просто объектом любого типа?
  2. Что означает <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 Что касается ваших вопросов:

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