¿Cómo interpretar “public <T> T readObjectData (... Class <T> type)” en Java?

Tengo este código de Java.

public <T> T readObjectData(ByteBuffer buffer, Class<T> type) {
...
T retVal = (T) summaries;
return retVal;

¿Cómo interpretar este código? Por qué necesitamospublic <T> T en lugar depublic T?

Cómo dar el parámetro al 2do argumento (Class<T> type)?

Respuestas a la pregunta(4)

Su respuesta a la pregunta