cannot resolve construtor 'ArrayList(java.util.Collction<java.lang.String>)'
来源:互联网 发布:windows net命令详解 编辑:程序博客网 时间:2024/06/08 00:03
错误分析
从错误信息可以看出是ArrayList这个构造方法出现问题。
ArrayList中存放的是User类型的元素,而红色波浪线报错的地方有个关键提示:java.lang.String.,根据这个为线索,继续分析java.Lang.String是怎么出现的?
java.Lang.String是属于java.util.Collection的泛型,就是说Collection这个集合中存放的是String类型的元素。疑问:
1. 为什么Collection中存放的是String类型的对象,并没有定义啊?
2. 错误信息中的java.util.Collection是怎么出现的?
3. ArrayList的构造函数中传入的是Collection类型的接口是什么意思?ArrayList构造函数是怎么定义的?
解决疑问:
1. db_users.values()返回的是Collection<V>类型。2. Collection<V>是Map<K,V>中的value类型,根据我的代码可知我的value是String类型,所以导致Collection的泛型指定的是String类型。3. ArrayList构造函数的三种定义方法:
第一种:构造一个初始容量为10的空列表第三种:构造一个指定初始容量的空列表第二种:构造一个含有指定collection的元素的列表。 此列表中的元素的类型是Collection所指定的泛型String类型,String类型是由Map<K,V>的value类型所决定。 而ArrayList中存放的是User类型的元素,所以不相符合。这就是错误的源头所在。所以,出现这种错误是由于构造函数语法错误。需要传入参数类型是User,而实际传入的类型是String。
错误信息结合生活例子
这种错误好比在中国消费用现金有两种方式:一种用人民币,一种是用银圆(相当于ArrayList构造函数有三种方法,只能穿入人民币或者银圆,其他银币不受理)。当你支付日本的日元,泰国的泰铢,澳大利亚的澳元,韩国的韩元,美国的美元,瑞士的瑞郎,欧洲的欧元,俄罗斯的卢布等等现金(相当于java.util.Collction指定的泛型是String类型),即当你给中国人强制传入非人民币和银圆时,中国人是cannot resolve的。
错误解决
把Map<K,V>中的V的类型修改为User类型
正确代码
private Map<Integer, User> db_users = Collections.synchronizedMap(new HashMap<Integer,User>()); public List<User> getUsers() { List<User> users = new ArrayList<User>(db_users.values()); return users; }
总结
对于集合中引用泛型List<E> list = new ArrayList(Collection<? extends E> collection)List中指定的泛型必须与想要存在List中的元素类型一致Collection<<? extends E>本人认为是?extend object的意思,而?就是存放在Collection集合中的元素,也是想要存放在List中的元素,所以此元素要想存放在List中,就必须与List指定泛型<E> 一致笼统的讲就是List中的<E> = Collection 中的<?>
阅读全文
0 0
- cannot resolve construtor 'ArrayList(java.util.Collction<java.lang.String>)'
- java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String
- java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList
- Mybatis 异常: java.util.ArrayList and java.lang.String
- cannot resolve getAttribute(java.lang.String)问题的解决
- IntelliJ IDEA Cannot resolve method println(java.lang.String)
- Intellij idea提示 Cannot resolve method"print(java.lang.String)"
- java.lang.String cannot be cast to java.util.Date
- java.lang.String cannot be cast to java.util.Date
- java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Map
- Java collction
- jedis 出现java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Long
- java.lang.IllegalArgumentException: invalid comparison: java.util.ArrayList and java.lang.String
- java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.ssh.domain.Article
- invalid comparison: java.util.ArrayList and java.lang.String——bug解决办法
- 关于mybatis报invalid comparison: java.util.Arrays$ArrayList and java.lang.String异常
- Intellij idea jsp web cannot resolve method getParameter(java.lang.String)
- 关于出现Intellij idea jsp web cannot resolve method getParameter(java.lang.String)
- zk2XListView+解析+侧滑
- 在Eclipse中测试MySQL-JDBC(8)sql注入的防范PreparedStatement(处理命令)
- wifidog 配置文件
- Ajax提交带件的表单
- linux系统中如何查看日志 (常用命令)
- cannot resolve construtor 'ArrayList(java.util.Collction<java.lang.String>)'
- 方向导数(Directional derivatives)
- 65到90 之间的数
- Boost Timer 计时器
- UVALive-7357-Pyro Tubes
- network
- win10使用tensorboard 0.0.0.0:6006无法访问
- 织梦dedecms删除文章的同时删除该文章下的图片和附件
- 机器学习常用算法三:协同过滤