Как здесь выводится универсальный тип?

public static void main(String[] args) {
    Map<String, Map<Long, List<String>>> map = getHashMap();
}

static <K,V> Map<K,V> getHashMap()
{
    return new HashMap<K, V>();
}

Я видел похожий код в google guava (как фабричные методы) для создания экземпляров Hashmap без упоминания обобщенных типов. Я не понимаю, как обобщение выводится вышеуказанной программой. Я имею в виду, как функция getHashMap может понимать тип карты, так как я не передаю никакой информации о типе функции.

Ответы на вопрос(3)

Ваш ответ на вопрос