универсальный как универсальный тип в Java?

1

У меня есть этот метод

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, он работал, но пара здесь не работает, я получил ошибку компиляции.

  • 0
    Вы хотите сказать нам, что говорит ошибка компиляции, или мы должны догадаться?
  • 0
    Затмение просто сказать "метод XXX не применим к аргументам XXX", ничего другого ...
Теги:
generics

1 ответ

3
Лучший ответ

Для 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.

  • 0
    +1 снова этот цепной актерский состав. Я все еще люблю это :)
  • 0
    Спасибо, это работает, но почему он должен сначала привести Pair.class к (Class <?>)?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню