1

I don't understand why this line is not causing a compile time error when get() function is expecting a String object and I am passing a char type.

int integer = romanValues.get(roman.charAt(roman.length() - 1));

This is my whole program:

import java.util.Map;
import java.util.HashMap;

public class Algorithm {
    public static void romanToInteger(String roman) {

        Map<String, Integer> romanValues = new HashMap<>();
        romanValues.put("I", 1);
        romanValues.put("V", 5);
        romanValues.put("X", 10);
        romanValues.put("L", 50);
        romanValues.put("C", 100);
        romanValues.put("D", 500);
        romanValues.put("M", 1000);

        int integer = romanValues.get(roman.charAt(roman.length() - 1));
    }

    public static void main(String[] args) {
        Algorithm.romanToInteger("XII");
    }
}
Ritesh
  • 45
  • 6
  • 1
    The definition of `get` is `V get(Object key);` so this is correct behaviour. Some IDEs will warn you. – tgdavies Jul 24 '21 at 08:26

1 Answers1

-1

In my understand your map defined key type as String but you passing on character type value so the compiler does not identify the key value on run time so you might be getting the value you conversion of the string value.

Example:

int integer = romanValues.get("" + roman.charAt(roman.length() - 1));

Map Interface reference:

/**
 * Returns the value to which the specified key is mapped,
 * or {@code null} if this map contains no mapping for the key.
 *
 * <p>More formally, if this map contains a mapping from a key
 * {@code k} to a value {@code v} such that {@code (key==null ? k==null :
 * key.equals(k))}, then this method returns {@code v}; otherwise
 * it returns {@code null}.  (There can be at most one such mapping.)
 *
 * <p>If this map permits null values, then a return value of
 * {@code null} does not <i>necessarily</i> indicate that the map
 * contains no mapping for the key; it's also possible that the map
 * explicitly maps the key to {@code null}.  The {@link #containsKey
 * containsKey} operation may be used to distinguish these two cases.
 *
 * @param key the key whose associated value is to be returned
 * @return the value to which the specified key is mapped, or
 *         {@code null} if this map contains no mapping for the key
 * @throws ClassCastException if the key is of an inappropriate type for
 *         this map
 * (<a href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
 * @throws NullPointerException if the specified key is null and this map
 *         does not permit null keys
 * (<a href="{@docRoot}/java/util/Collection.html#optional-restrictions">optional</a>)
 */
V get(Object key);
Sathiyaraj
  • 343
  • 3
  • 11