doriți să creați o hartă ,Object poate fi String și poate fi clasa Object (Programare, Java)

Saurabh Kumar a intrebat.

Cum vreau să creez un Map<String , Object>.

În această hartă, de fiecare dată când obiectul este un șir de caractere. Dar acum vreau să pun o clasă în obiect în plus față de aceasta. Este aceasta o modalitate bună de a amesteca șirul și un obiect de clasă? Dacă da, atunci când iternez prin hartă, cum pot face distincția între clasă și șir?

Comentarii

  • puteți utiliza if (object instanceof java.lang.String ) pentru a face distincția între clasă și șir. –  > Por nidhin.
  • Nu este foarte clar ce doriți să realizați. Întrebarea dvs. sugerează o hartă în care cheile sunt String, iar valorile sunt obiecte. Acesta este un mod obișnuit și corect, dar nu sunt sigur că este ceea ce vreți să spuneți. Poate că ar trebui să arătați un exemplu de cod pentru a vă clarifica intenția. –  > Por Daniel Schneller.
3 răspunsuri
Bohemian
Map<String, Object> map = new HashMap<String, Object>();
...
for (Map.Entry<String, Object> entry : map.entrySet()) {
    if (entry.getValue() instanceof String) {
        // Do something with entry.getKey() and entry.getValue()
    } else if (entry.getValue() instanceof Class) {
        // Do something else with entry.getKey() and entry.getValue()
    } else {
        throw new IllegalStateException("Expecting either String or Class as entry value");
    }
}

Buhake Sindi

Fiecare obiect (cu excepția interfețelor) în java extinde Object, , deci abordarea ta este corectă.

Pentru a ști dacă un obiect este un șir de caractere sau un alt tip de obiect, utilizați funcția instanceof keyword.

Exemplu:

Map<String, Object> objectMap = ....;

for (String key :  objectMap.keySet()) {
    Object value = objectMap.get(key);
    if (value instanceof String) {
        System.out.println((String) value);
    } else if (value instanceof Class) {
        System.out.println("Class: " + ((Class)value).getName());
    }
}

Harry Joy

După cum aveți Object ca valoare în Map, puteți adăuga orice obiect ca valoare, cum ar fi String, Integer, clasa dvs. personalizată…

Iar pentru a face distincția între clasă și șir de caractere în timpul iterației, puteți utiliza instance of pentru a verifica dacă este vorba de String sau nu.

De exemplu:

Set<String> mapKeys = myMap.keySet();
for (String key :  mapKeys) {
    Object value = myMap.get(key);
    if (value instanceof String) {
        //value is of type String
    } else if (value instanceof MyClass) {
        //value is of type MyClass
    }
}

Tags: