0

JSON Jackson pojo シリアライゼーション/デシリアライゼーションのラッパーを書いています。そこで、逆シリアル化されたオブジェクトを汎用的に返す汎用メソッドを作成しようとしました。

コードはこれをよりよく説明すると思います:

public <K,V, M extends Map<K, V>> M readMap(String path, Class<M> mapType, Class<K> keyClass, Class<V> valueClass) throws JsonParseException, JsonMappingException, IOException
{
    ObjectMapper mapper = new ObjectMapper();
    return mapper.readValue(new File(path), mapper.getTypeFactory().constructMapType(mapType, keyClass, valueClass));
}

コード

HashMap<String, Double> weightMap;
JSONParsedFileHandler reader = new JSONParsedFileHandler();
weightMap = reader.readMap("weights.model", HashMap.class, String.class, Double.class);

これは期待どおりに機能しますが、タイプ セーフの警告が表示されます。

Type safety: The expression of type HashMap needs unchecked conversion to conform to HashMap<String,Double>

これは、コード化されたようにパラメーター化されていないことを除いて、返される型が期待どおりであることを意味すると考えました。

誰か考えがありますか?

4

2 に答える 2

1

このconstructMapTypeメソッドは、キーとコンテンツを定義するためにMapType使用する を返します。Class<?>基本的に変換される型消去をObject使用すると、コンパイラーがマップで使用されている型を知る方法がありません。型「(ユーザーが) コード化したとおりにパラメーター化されます」が、Java のジェネリックの実装により、提供した型の実行時の知識が妨げられます。私が間違っている場合は誰かが私を修正しますが、警告に対処するか、それを抑制するしか選択肢はないと思います。

于 2013-10-05T17:48:27.957 に答える