У меня есть этот метод
static public <K> float calculateSimilarity(HashMap<K, Float> hashMap1, Class<K> clazz)
В этой части я называю этот метод следующим:
HashMap<Pair<Long,Long>,Float> newValues1=....; //A.K.A. K is Pair<Long,Long> type.
calculateSimilarity(newValue1, Pair.class); // Doesn't work here!
где Пара
org.apache.commons.lang3.tuple.Pair
Пара, состоящая из двух элементов.
Не могли бы вы рассказать мне, как я должен использовать Pair.class при вызове метода compareSimilarity? Потому что, если я использую String как K, он работал, но пара здесь не работает, я получил ошибку компиляции.
Для HashMap<Pair<Long, Long>>
параметр типа K
выводится как Pair<Long, Long>
. Поэтому вам необходимо передать Class<Pair<Long, Long>>
но вы пропустите Class<Pair>
. Вам необходимо использовать соответствующий бросок:
calculateSimilarity(newValue1, (Class<Pair<Long, Long>>)(Class<?>)Pair.class);
Приведение требуется, потому что вы не можете напрямую получить требуемый тип Class
используя литерал .class
.