我有一个表示一个对象的BeanMap,该对象的一个字段是一个List,我希望能够添加到该对象。在此刻,代码将简单地获取一个现有列表并将完整列表放入BeanMap中。但是,如果以后我想将项目添加到列表中,则它们将覆盖那里的项目,因为新列表正被放入BeanMap中。
到目前为止,我已经尝试过从BeanMap获取List,但是它不允许我使用beanMap.get方法并为该返回结果分配新的字符串。不过,您可以为对象这样做。
我也尝试将其作为as对象并使用Arrays.asList()对其进行操作。但这也不起作用。
我目前尝试的操作:
Object listObject = myBeanMap.get("theList");
Arrays.asList(listObject).add("SOME STRING");
myBeanMap.put("theList", listObject);
我正在寻找一种在保留现有项目的同时将项目添加到该列表的方法。
答案 0 :(得分:2)
Arrays.asList(listObject).add("SOME STRING");
Arrays.asList
创建一个新列表,向其中添加一些内容,但是您从未保存该列表,因此无法添加新内容。您需要将代码更改为此:
List<Object> list = Arrays.asList(listObject, "SOME STRING");
myBeanMap.put("theList", list);
您不能使用add()
方法,因为Arrays.asList()
返回的列表实现不支持add()
,并且会出现运行时异常。这就是为什么您必须将所需的新项目作为Arrays.asList()
调用的参数的原因。
修改1:
如果listObject
已经是列表实例,例如一串字符串,您可以先进行投射再添加一个:
List<String> list = (List<String>) myBeanMap.get("theList");
list.add("another string");
myBeanMap.put("theList", list);
修改2: 如果要保留原始列表,则需要复制旧列表:
List<String> original = (List<String>) myBeanMap.get("theList");
List<String> extended = new ArrayList<>(original);
extended.add("new string"); // "new string" is NOT added to the original list
myBeanMap.put("theExtendedList", extended);