如何在Java元组实现中存储类型

如何在Java元组实现中存储类型,java,types,tuples,Java,Types,Tuples,我希望创建一个数据结构,以结构化格式存储对象及其实际类型。我处理的数据中,所有内容都作为对象传递,并以对象的形式传入 我希望调整或构建一个数据结构类 数据以地图的形式进入应用程序。这个映射可以嵌套得很深,所以我正在使用一个函数,在给定路径字符串的情况下遍历映射。此字符串包含嵌套贴图中每个层的键,用..分隔。。例如,路径字符串可能看起来像path.to.some.field 目前,代码库中使用了以下许多习惯用法: Map<String, Object> data; if (data.c

我希望创建一个数据结构,以结构化格式存储对象及其实际类型。我处理的数据中,所有内容都作为对象传递,并以对象的形式传入

我希望调整或构建一个数据结构类

数据以地图的形式进入应用程序。这个映射可以嵌套得很深,所以我正在使用一个函数,在给定路径字符串的情况下遍历映射。此字符串包含嵌套贴图中每个层的键,用..分隔。。例如,路径字符串可能看起来像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...
  }
}
用法示例:

DataPair p = findDataEntry(data, path);
p.left dataentry = new p.left;
dataentry = p.right;
这在Java中可能是不可能的,因为它需要动态声明dataentry,并使用p.left中存储的变量类型信息。p、 left可以是任何类型,从int到String再到SomeClass

看。如果Java不支持在对象声明中使用变量类型,那么这个问题的全部目标就没有意义了


我的问题是:如何在数据结构中存储列表之类的类型信息?

不需要一对。对象已包含其自己的类型。在我看来,你所需要的只是:

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

您是否考虑过使用类似Jackson的工具将地图绑定到pojos或为您遍历路径?我的意思是重新思考你试图解决的问题。为什么?对象包含自己的类型。要详细说明EJP的注释,对象有一个getClass方法,您可以随时使用instanceof@DavidEhrmann我试图在主要的应用程序函数中抽象出一堆instanceof检查。此数据中给定对象类型的可能性有限。其思想是返回一对类型和对象。也许有一种不同的或更好的方法来做这件事……这感觉像是一个
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;
}