在定义Class <! - ? - >的方法中声明泛型类型

时间:2015-11-07 04:01:21

标签: java generics jackson

我想做什么:

getMapType(String.class,String.class); //returns me a MapType of Map<String,String>

我尝试过的事情:

public static <K extends Class<?>, V extends Class<?>> MapType getMapType(K keyClass, V valueClass) {
    return objectMapper.getTypeFactory().constructMapType(HashMap.class, keyClass,valueClass);
}

当声明K时,这给了我一个警告,V正在扩展该类。

The type parameter V should not be bounded by the final type Class<?>. Final types cannot be further extended

我知道这意味着任何类都不能扩展Class,因为它是最后一个类。如果我删除extends Class<?>,则方法constructMapType(...)将因类型而失败。 我的问题是我如何实施我的方法,所以我没有得到这个警告?

3 个答案:

答案 0 :(得分:2)

看起来你可能正在寻找

public static <K, V> MapType getMapType(Class<K> keyClass, Class<V> valueClass){
    ...
}

答案 1 :(得分:0)

您可能正在考虑实施类似

的内容
import java.util.HashMap;
import java.util.Map;



public class HashMapExample {
    public static <K, V> Map<K,V> getMapType(Class<K> keyClass, Class<V> valueClass) {
        return new HashMap<>();
    }

    public static void main(String[] args) {
        Map<String, String> mapType = HashMapExample.getMapType(String.class, String.class);


    }
}

考虑查看java中Collections类的一些源代码 - 它看起来如下

public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) {
        return new SynchronizedMap<>(m);
}

答案 2 :(得分:0)

如果方法中实际未引用类型KV,则只需使用通配符:

public static MapType getMapType(Class<?> keyClass, Class<?> valueClass) {
    return objectMapper.getTypeFactory().constructMapType(
        HashMap.class, keyClass, valueClass);
}