Значение не относится к типу Object, а к некоторому типу, который расширяется от Object (в java все неявно расширяет Object). Назовем его «X»
Теперь он не работает как python, потому что, в отличие от python java, не имеет такой динамики c.
{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;}
}
С этого момента у вас есть 2 способа получить размер:
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();
Последнее замечание:
Если случится, что значение имеет тип String, вы не сможете получить размер, кроме синтаксического анализа значения с помощью обычного выражение или что-то в этом роде. В этом случае лучше рассмотреть рефакторинг.