java Hashmap接收true而不是ArrayList
结果证明我在工作(正如你所看到的,我还不是高级开发人员),突然意识到我的代码出了问题。Hashmap接收“true”,而不是接收第一个位置有一个对象的ArrayList。作为一个例子,你可以看到我所说的如下:
Product item = new Product();
Map rMap = new HashMap();
rMap.put("productsList", new ArrayList().add(item));
在特定的代码行和编码帮助方法之后,我试图从地图中检索“productsList”,但我做不到,我不知道为什么,所以在调试之后,我发现当PUT完成时,没有这样的列表,只有一个布尔值。我找回它的方式如下:
if (rMap.containsKey("productsList")) {
// This IF statement was being skipped because of the Boolean
if (rMap.get("productsList") instanceof ArrayList) {
List<Product> pr = (List) rMap.get("productsList");
}
}
另一方面,我有这个(这是更清楚的方式)和预期的炒锅:
Product item = new Product();
Map rMap = new HashMap();
List < Product > myList = new ArrayList();
myList.add(item);
rMap.put("productsList", myList);
为了减少创建列表并将对象设置到列表中的这两行代码,可以做些什么?这当然没什么大不了的,只是我想让我的编码更清晰、更稳重
# 1 楼答案
另一种方法是使用double brace initialization语法:
但它有一些副作用(编译器需要生成一个附加类)
开始你的问题。按照设计,标准Java集合类没有修改集合并返回修改过的对象的方法(比如^{)。所以这个初始化非常干净:
# 2 楼答案
您可以使用
Arrays#asList
而不是new ArrayList().add(item)
,但是它会返回一个固定大小的列表,而这可能不是您想要的另一种方法是像这样使用^{} 来创建并添加一个您想要映射的类型的新列表,然后在返回时将该项添加到列表中
# 3 楼答案
你可以像这样使用Arrays#asList方法
我还想建议您使用泛型,作为交换,您将获得类型安全性