泛型作为Java中的泛型类型?

时间:2014-04-01 09:00:45

标签: java generics

我有这个方法

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!

其中Pair是

  

org.apache.commons.lang3.tuple.Pair

     

由两个元素组成的对。

请告诉我在调用calculateSimilarity方法时如何使用Pair.class?因为如果我使用String作为K它可以工作但是在这里配对它没有工作我得到了编译错误。

1 个答案:

答案 0 :(得分: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类型。