0 0

Map 类型转换问题5

具体情况是这样的:

我一个方法签名是这样的

 

public  void writeSheet(List<Map<String, Object>> data);

 

 

但是当我 传入一个 List<Map<String,String>> list 时,他却提示参数类型不符, 但是我 又添加一各方法时,却被提示方法已存在

public  void writeSheet(List<Map<String, String>> data);

 

 我想问下 ,Map中的类型没有 向上兼容的特性吗? 比如 Object通吃一切类型。

 

2014年5月16日 14:40

6个答案 按时间排序 按投票排序

0 1

采纳的答案

(1).数组是协变的,即如果Sub为Super的子类型,那么数组类型Sub[]就是Super[]的子类型;
泛型是不可变的,即对于任何两个不同类型Type1和Type2,List<Type1>既不是List<Type2>的子类型,也不是List<Type2>的超类型。
Object[] objectArray = new Long[1];
objectArray[0] = “I don't fit in”;
上述代码在编译时没有错误,只有在运行时才会报ArrayStoreException。
List<Object> ol = new ArrayList<Long>();
ol.add(“I don’t fit in”);
上述代码的第一句就会在编译时报类型不兼容错误。

详见《Effective Java》

简单地说,Map<String, Object>不是Map<String, String>的超类型

2014年5月16日 16:03
0 0

反正这个问题结贴了,我就再开一个回答好了。前面我的问题一的回答写太快,不谨慎,这里引以为戒。但是思路是不变的,这里重新回答楼主的问题。

参数表要定义成这样

List<? extends Map<String, ? extends Object>> map

才行。。。

首先Map<String, String>不能继承自Map<String, Object>,但是可以继承自Map<String, ? extends Object>, (即value的位置可以传入所有以Object作为父类的类)。
同理,List 这一层,也必须使用同样的做法。总的来说,这样太蛋疼,还是要尽量在代码里避免这种写法。

2014年5月16日 18:11
0 0

看了之前的4个回答,基本上都是偏的,没踩到题主的点上。还有采纳的答案,看上去说的也是对的,不过基本没回答什么东西。

题主一共有两个问题
1. 为什么参数表中List<Map<String, Object>> 无法传入List<Map<String, String>>?
2. 为什么重载一个writeSheet(List<Map<String, String>> data)方法不能通过编译?

第一个问题正确的做法是方法的参数表设置为Map<String, ? super Object> map,按照字面理解就是value的位置可以传入所有以Object作为父类的类,String就可以传了。采纳的答案这一点是对的,Map<String, Object> 和 Map<String, String>是完全不同的两个类型。

第二个问题,对于重载来说,writeSheet(List<Map<String, String>> data) 和 writeSheet(List<Map<String, Object>> data)是完全相同的方法。
可是参数的泛型不是不一样吗?错,参数真的是一模一样的,因为泛型的语法在javac编译后就会“擦除”。最后两者都变成writeSheet(List data),一样了当然不能通过编译了。

2014年5月16日 17:43
0 0

有两种办法:

1. 不要使用Map<String,String>的类型MAP,都统一使用Map<String,Object>,这样一个声明就可以用了。

public  void writeSheet(List<Map<String, Object>> data);


2. 如果你真的需要一个方法既可以传入List<Map<String,Object>>又可以传入List<Map<String,String>>,那么就把方法声明成

public void writeSheet(List<? extends Map> data) 


但是这个方法只能从data里面读取Map,不能往里面写Map。

还是建议你在使用Map的时候,统一使用Map<String,Object>,因为这个map也可以往里面放String,也可以放Object,读的时候,基本上都应该是字符串类型吧,或者还有其他的数字类型。

2014年5月16日 17:05
0 0

方法签名一样,方法名 和方法参数一致,就会报错了。
重新定义一方法,方法名不一样不就行了。
既然是写入excel一般都是string类型,即使不是你在方法里面也得装换为string类型

2014年5月16日 15:38
0 0

有但不是你这样的
public  void writeSheet(List<Map<String, Object>> data); 

public  void writeSheet(List<Object> data); 

你那是map里面是属性

一般传参数也是
List<Map<String, Object>> 类型的

2014年5月16日 14:44

相关推荐

    map.toString()后转换成Map类型

    ### Map.toString()后转换成Map类型的实现方法及解析 在Java编程中,有时我们需要将一个`Map`对象转换为字符串形式进行存储或传输,而在接收端又需要将该字符串重新转换回`Map`对象以便进一步处理。本篇将详细介绍...

    java将xml串转换成Map类型

    将xml串转换成Map类型,如果有重复节点,自动转换为list类型存储,所以最终转换并非绝对Map

    【java】mapstruct自定义类的转换示例(csdn)————程序.pdf

    在Java开发中,MapStruct是一个非常实用的代码生成库,它简化了对象之间的映射过程,尤其是当对象之间存在复杂的转换逻辑时。本示例主要介绍如何在MapStruct中自定义类转换,以便处理特定的转换需求。我们将通过分析...

    Map转换成xml

    ### Map转换为XML的知识点详解 在Java编程中,将数据结构如`Map`转换为XML格式是一种常见的需求,尤其是在处理配置文件、数据交换或与Web服务交互时。以下是对如何实现这一转换的深入解析,涵盖了代码逻辑、关键...

    SpringBoot+Mybatis,返回Map的时候,将Map内的Key转换为驼峰的命名

    总的来说,处理Map中Key的驼峰命名转换是Java开发中的常见需求,通过自定义工具类或利用现有的库,我们可以轻松地解决这个问题,提高代码质量。在实际项目中,还应注意处理异常情况,确保在Key不存在或者格式不正确...

    详解Go开发Struct转换成map两种方式比较

    这种转换方法的优点是实现简单,对大多数基本类型和一些复杂的类型(如slice、map、指针)都是支持的。 在示例中,我们创建了一个Persion的实例,并使用json.Marshal函数对它进行编码。然后,我们创建了一个空的map...

    优雅的对象转换解决方案,为什么更推荐MapStruct呢.docx

    1. **JavaBean转换问题** - 在传统的Java开发中,JavaBean之间的转换通常需要手动编写`set`和`get`方法,这既耗时又容易出错。当需要处理大量属性或字段时,这种手动工作尤其繁琐。 - 使用反射库如Apache的...

    json 转换为map

    在这种情况下,可以将Map的值类型指定为其他复杂类型,如List或其他自定义的Java类。 `google-gson`库不仅限于JSON到Map的转换,还支持许多其他功能,例如将Java对象序列化为JSON,反序列化Java对象,处理日期和...

    一个简单的利用map关联容器进行单词转换的实例

    首先创建了一个`map,string&gt;`类型的转换表`trans_map`,并初始化了一些俚语及其对应的正式表达方式。 ```cpp trans_map.insert(valtype("gratz", "grateful")); trans_map.insert(valtype("em", "them")); // ... ...

    将Map转换成Java实体

    * 将Map转换为指定类型的实体对象 * * @param map 需要转换的Map * @param entityCls 实体类的Class对象 * @param &lt;T&gt; 实体类的类型 * @return 转换后的实体对象 * @throws IllegalAccessException 当反射...

    MapUtils工具类,轻松转换map数据与实体类

    `MapUtils`工具类就是为了解决这样的问题而设计的,它简化了`Map`对象和实体类之间的转换过程。本篇文章将深入探讨`MapUtils`工具类的使用及其在Java开发中的重要性。 首先,让我们了解一下实体类。在Java中,实体...

    List转换为List

    在处理Java中的数据结构时,常常需要在不同类型之间进行转换,以适应不同的使用场景和业务需求。本知识点重点讲解将List转换为List&lt;Map&gt;的过程,这在进行Web开发、数据处理以及与前端交互等场景中非常常见。同时,也...

    C++ 四种强制类型转换的总结

    ### C++ 四种强制类型转换的总结 在C++编程语言中,为了实现不同数据类型之间的转换,提供了四种不同的强制类型转换操作符:`static_cast`、`const_cast`、`dynamic_cast` 和 `reinterpret_cast`。这些操作符不仅在...

    map与Javabean相互转换实例

    这里,`mapToBean`方法创建了指定类型的`JavaBean`实例,并通过反射将`Map`中的键值对设置到对应字段上。 `collectionUtils`可能是提供这些转换功能的一个工具类,包含了一系列关于集合操作的实用方法,包括`Map`和...

    对象转换成JSON和Map

    - **序列化与反序列化**:对象转换为JSON或Map时,需要考虑哪些字段需要包含,哪些应该忽略,以及如何处理复杂类型如日期和自定义类型。 - **性能**:大量数据转换时,要考虑效率,选择合适的库和方法进行优化。 ...

    jackson json 转 map 数值科学计数法的问题解决.docx

    在使用 Jackson 将 JSON 转换为 Map 的过程中,可能会遇到科学计数法的问题。该问题的出现是因为 JSON 中的数值类型太多,在转换过程中可能会出现科学计数法的表示方式。 例如,在将 JSON 字符串转换为 Map 时,...

    MapStruct实体转换及List转换的方法讲解

    MapStruct支持多种实体转换方式,包括基本数据类型的映射、枚举类型的映射和自定义类型的映射等。 例如,我们可以将Student对象转换成User对象,使用以下代码: ```java @Mapper(componentModel = "spring") ...

    JavaBean与map的互相转换

    使用Java反射机制,将给定的javaBean转化为Map数类型,以及将Map类型的数据转化为JavaBean

    Map和Bean灵活转换工具类

    `JavaBeanUtil`可能与`BeanUtils`相似,但可能存在一些特定的实现或扩展功能,比如支持自定义转换规则、处理复杂类型的属性等。在实际使用中,我们应根据具体需求来选择合适的工具类。 在源码层面,`MapUtils`和`...

    Java常用的强转类型,基本数据类型转换,JSONObject强转Map,JSONArray强转List(附源码)

    本文将深入探讨Java中的一些关键转换技术,包括基本数据类型的转换、JSONObject到Map的转换以及JSONArray到List的转换,并提供相关的源码示例。 一、基本数据类型转换 1. 自动类型转换:当我们将一个范围小的数据...

Global site tag (gtag.js) - Google Analytics