我希望创建一个数据结构来存储Object
及其实际类型的结构化格式。我正在处理数据,其中所有内容都以Objects
传递并且正在进行中。
我希望能够调整Apache Commons Pair或构建数据结构类。
数据作为Map<String, Object>
进入应用程序。这个Map
可以嵌套得很深,所以我正在研究一个遍历Map
给定路径字符串的函数。此字符串包含嵌套地图中每个图层的键,由.
分隔。例如,路径字符串可能看起来像"path.to.some.field"
。
目前,代码库中使用了很多以下类型的习惯用法:
Map<String, Object> data;
if (data.containsKey("someKey")) {
Object obj = data.remove("someKey")
if (obj instanceof Map< ? , ? >) {
Map<String, Object> objMap = (Map<String, Object>) obj;
// repeat...
}
}
虽然这是有效的,但是当您移动外部地图data
时,会进行大量检查和输入。正如我所说,我正在开发一个函数,可以将它抽象为一个遍历Map
的函数。我希望能够返回易于使用的数据。类似的东西:
public DataPair findDataEntry(Map<String, Object> currentMap, String path)
{
// recursive function that walks map.
// It also checks type as well as if the path is valid as it goes along
// returns a structure containing the object and its 'type'
return new DataPart(type, entry)
}
使用示例:
DataPair p = findDataEntry(data, path);
p.left dataentry = new p.left;
dataentry = p.right;
这在Java中可能是不可能的,因为它需要动态声明dataentry
使用存储在p.left
中的变量类型信息。 p.left
可以是任何type
,从int
到String
到SomeClass
。
见Object Creation。如果Java不支持在Object声明中使用变量类型,那么这个问题的整个目标都没有实际意义。
我的问题是:如何在数据结构中存储类型信息(如List<String>
)?
答案 0 :(得分:0)
不需要一对。对象已包含自己的类型。在我看来,你所需要的只是:
public Object findDataEntry(Map<String, Object> map, String path)
{
Object obj;
while ((obj = map.remove(path)) != null) {
if (obj instanceof Map) {
map = (Map<String, Object>) obj;
} else {
break;
}
}
return obj;
}