2015-11-07 204 views
0

我所試圖做的事:聲明泛型類型<?>

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 

我知道這意味着任何類不能擴展類,因爲它的final類。如果我刪除extends Class<?>,則方法constructMapType(...)將因類型而失敗。 我的問題是我如何實現我的方法,所以我沒有得到這個警告?

回答

2

看起來你可能會尋找

public static <K, V> MapType getMapType(Class<K> keyClass, Class<V> valueClass){ 
    ... 
} 
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); 
} 
+0

我認爲我們的目標是有點不同,因爲它不是關於構建'Map'實例,但創建'MapType',這是數據綁定所需的Jackson類型表示,讓Jackson知道將數據綁定到(或有時來自)的類型的細節。 – StaxMan

0

如果類型KV的方法實際上並沒有提及,你可以簡單地使用通配符:

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