Java 如何获取地图中特定字段的值<;字符串,对象>;

Java 如何获取地图中特定字段的值<;字符串,对象>;,java,Java,我有点像: Map<String, Object> hashMap; hashMap.get("binary"), I get value as: {size=5642, name=abc} 这里,key是二进制的,value是Object类型的对象,是{size=5642,name=abc} 请注意,这些值不属于特定的类。 在Python中,我可以做一些类似于hashMap[“binary”][“size”]的事情,我想知道java中的等价物是什么 如何在不解析上述字符串的情况

我有点像:

Map<String, Object> hashMap;
hashMap.get("binary"), I get value as: {size=5642, name=abc}
这里,
key
是二进制的,
value
是Object类型的对象,是{size=5642,name=abc}

请注意,这些值不属于特定的类。 在Python中,我可以做一些类似于hashMap[“binary”][“size”]的事情,我想知道java中的等价物是什么


如何在不解析上述字符串的情况下直接获取
size
的值?

该值不是Object类型,而是从Object扩展而来的某种类型(在java中,所有内容都隐式扩展Object)。我们叫它“X”

现在,它不像python那样工作,因为java不像python那样具有动态性

{size=5642,name=abc}
可能是该类型X的字符串表示形式。这是您在调试器中看到的,也可能是在尝试使用
System.out.println
或其他工具在控制台上打印值时看到的

现在首先要弄清楚它是哪种类型:

Object value = hashMap.get("binary")
System.out.println(value.getClass().getName());
它将打印类名

然后检查该类的源代码,可能如下所示:

public class X {
   private final int size;
   private final String name;

   ... // constructor, other stuff maybe


   // these are called "getters" in java world
   public int getSize() {return size;}
   public String getName() {return name;}
}
从这一点来看,有两种方法可以获得尺寸:

Object value = hashMap.get("binary");
int size = ((X)value).getSize();  // This is called downcasting
这种方法的缺点是没有利用泛型的功能

因此,如果可能,更好的选择是重构,当然:

Map<String, X> hashMap = ...
X value = hashMap.get("binary");
value.getSize();
Map hashMap=。。。
X值=hashMap.get(“二进制”);
getSize();
最后一点注意:


如果值的类型恰好是String,那么除了使用正则表达式或其他方法解析该值之外,您将无法获取该值的大小。在这种情况下,考虑重构是一个更好的选择。

< P>值不是对象类型,而是从对象扩展的某种类型(在java中,所有对象都是隐式扩展对象)。我们叫它“X”

现在,它不像python那样工作,因为java不像python那样具有动态性

{size=5642,name=abc}
可能是该类型X的字符串表示形式。这是您在调试器中看到的,也可能是在尝试使用
System.out.println
或其他工具在控制台上打印值时看到的

现在首先要弄清楚它是哪种类型:

Object value = hashMap.get("binary")
System.out.println(value.getClass().getName());
它将打印类名

然后检查该类的源代码,可能如下所示:

public class X {
   private final int size;
   private final String name;

   ... // constructor, other stuff maybe


   // these are called "getters" in java world
   public int getSize() {return size;}
   public String getName() {return name;}
}
从这一点来看,有两种方法可以获得尺寸:

Object value = hashMap.get("binary");
int size = ((X)value).getSize();  // This is called downcasting
这种方法的缺点是没有利用泛型的功能

因此,如果可能,更好的选择是重构,当然:

Map<String, X> hashMap = ...
X value = hashMap.get("binary");
value.getSize();
Map hashMap=。。。
X值=hashMap.get(“二进制”);
getSize();
最后一点注意:


如果值的类型恰好是String,那么除了使用正则表达式或其他方法解析该值之外,您将无法获取该值的大小。在这种情况下,考虑重构是一个更好的选择。

如果对象被保存在一个单独的变量中,你将如何得到它的字段?这能回答你的问题吗?这完全取决于你在hashMap中输入了什么,但你没有向我们展示。使用
对象
作为值类型非常广泛。如果需要某个特定的值字段,则需要将值类型声明为更具体的值,如
Map
I编辑了问题。现在更清楚了吗?您必须将检索到的对象强制转换为它的实际类,然后如果它有一个具有该名称的getter,则可以调用getSize()。如果该对象的字段保存在单独的变量中,您将如何获取该对象的字段?这是否回答了您的问题?这完全取决于你在hashMap中输入了什么,但你没有向我们展示。使用
对象
作为值类型非常广泛。如果需要某个特定的值字段,则需要将值类型声明为更具体的值,如
Map
I编辑了问题。现在更清楚了吗?您必须将检索到的对象强制转换为它的实际类,然后如果它有一个具有该名称的getter,您可以调用getSize()。谢谢您的详细解释!非常有用。我发现这个类是java.util.LinkedHashMap[Result of value.getClass().getName()],感谢您的详细解释!非常有用。我发现这个类是java.util.LinkedHashMap[value.getClass()的结果。getName()]