如何在Java Tuple实现中存储类型

时间:2017-11-01 01:01:55

标签: java types tuples

我希望创建一个数据结构来存储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,从intStringSomeClass

Object Creation。如果Java不支持在Object声明中使用变量类型,那么这个问题的整个目标都没有实际意义。

我的问题是:如何在数据结构中存储类型信息(如List<String>)?

1 个答案:

答案 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;
}