Получить тип переменной в HashMap в Java - PullRequest
1 голос
/ 06 ноября 2011

У меня есть HashMap<String,Object> и хранятся некоторые данные от 3 различных типов (целое, строковое, длинное).
Как узнать тип значения с определенным ключом?

Ответы [ 6 ]

3 голосов
/ 06 ноября 2011

Вы можете вызвать getClass метод , чтобы найти тип объекта:

map.get(key).getClass()
2 голосов
/ 15 февраля 2017

Обычно не рекомендуется использовать тип Object без необходимости.Но, в зависимости от вашей ситуации, вам может потребоваться HashMap<String, Object>, хотя этого лучше избегать.Тем не менее, если вам нужно использовать один из них, вот небольшой фрагмент кода, который может помочь.Используется instanceof.

    Map<String, Object> map = new HashMap<String, Object>();

    for (Map.Entry<String, Object> e : map.entrySet()) {
        if (e.getValue() instanceof Integer) {
            // Do Integer things
        } else if (e.getValue() instanceof String) {
            // Do String things
        } else if (e.getValue() instanceof Long) {
            // Do Long things
        } else {
            // Do other thing, probably want error or print statement
        }
    }
2 голосов
/ 06 ноября 2011

Если вы хотите сделать обработку на основе типа.

Object o = map.getKey(key);
if (o instanceof Integer) {
..
}

Вы также можете инкапсулировать значение или карту (ы) в некоторый смарт-класс.

2 голосов
/ 06 ноября 2011

может быть лучше обернуть его в пользовательский класс (например, теговое объединение)

class Union{
    public static enum WrappedType{STRING,INT,LONG;}
    WrappedType type;
    String str;
    int integer;
    long l;

    public Union(String str){
         type = WrappedType.STRING;
         this.str=str;
    }

    //...
}

это чище, и вы можете быть уверены, что вы получите

1 голос
/ 06 ноября 2011

Если вы будете что-то делать с результатом, вы можете попробовать оператор instanceof:

if (yourmap.get(yourkey) instanceof Integer) {
    // your code for Integer here
}
1 голос
/ 06 ноября 2011

Вы можете пересмотреть смешивание разных типов в одной коллекции. Вы теряете автоматическую проверку типов из дженериков.

В противном случае вам нужно будет использовать instanceof или, как SLaks предложил getClass, чтобы выяснить тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...