java - 泛型方法中的泛型参数返回值

标签 java generics parameterization

我正在为 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>

我认为这意味着返回的类型符合预期,只是它没有按照我的编码进行参数化。

有人有什么想法吗?

最佳答案

constructMapType方法返回 MapType ,它使用 Class<?>定义键和内容。通过类型删除,基本上可以翻译为 Object并且编译器无法判断映射中使用了哪些类型。该类型“按照(您)编码进行参数化”,但 Java 的泛型实现阻止了您提供的类型的任何运行时知识。如果我错了,有人会纠正我,但我相信您唯一的选择是处理警告或抑制它。

关于java - 泛型方法中的泛型参数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19200716/

相关文章:

java - 如何将 org.apache.commons.io.FilenameUtils 添加到 intellij 中的 Maven?

java - 有没有办法在单击 recyclerView 项目时将其移动到底部?

java - Stream sorted() 导致意外结果

java - BouncyCaSTLe 签名 : java. security.InvalidKeyException: key 格式无效

C# Is Type in list 问题

java - 将 ArrayList<Subclass> 传递给使用 List<Superclass> 声明的方法

c# - 从通用模型中获取模型

java - 如何最好地参数化字符串

java - 测试类的参数化