Java对象映射在传递给函数并用作字符串映射时,不会隐式地将对象转换为字符串

Java对象映射在传递给函数并用作字符串映射时,不会隐式地将对象转换为字符串,java,collections,hashmap,Java,Collections,Hashmap,假设HashMap定义为: void defineMap(){ Map options = new HashMap<Object,Object>(); options.put("isValid","true"); options.put("isXYZ","false"); options.put("Size",6.0); int x = getFromMap(options); } 在我的getFromMap()函数中 帮助我理解为什么在调用函数并将Map作为

假设HashMap定义为:

void defineMap(){
  Map options = new HashMap<Object,Object>();
  options.put("isValid","true");
  options.put("isXYZ","false");
  options.put("Size",6.0);
  int x = getFromMap(options);
}
在我的getFromMap()函数中


帮助我理解为什么在调用函数并将Map作为参数传递时没有抛出错误,或者为什么值没有转换为字符串

为什么在Map中存储双值


通过每次对值进行类型检查或转换为字符串,可以轻松解决此问题。但我想了解为什么会出现上述情况



尝试使用Double.intValue();


double没有存储在
映射中,您会得到异常,因为Integer.parseInt需要一个字符串,而抛出ClassCastException的地方就是这个字符串。回答您的问题。为什么double值存储在映射中

您已经创建了地图 因此,当您仅放置6.0时,您可以将任何数据类型对象放置在该映射中,它的行为将是double,您将其放置为“6.0”,其类类型是String 喜欢演示

            Object obj="6.0";
            System.out.println("type is ="+obj.getClass());

            obj=6.0;
            System.out.println("type is ="+obj.getClass());

            obj=6;
            System.out.println("type is ="+obj.getClass());
输出:

type is =class java.lang.String
type is =class java.lang.Double
type is =class java.lang.Integer

因此,最好使用对象返回类型。

使用类型映射时,会发出原始类型警告,而不指定其泛型类型。将其定义为映射,您将无法在其中插入除字符串以外的任何内容。泛型并不是将对象转换为其他类型。这永远不会发生。它是关于指定允许的类型。
映射选项
-您使用的是rawtype。如果忽略编译器警告,则不能抱怨没有收到警告!
int val= options.get(some_number).intValue();
            Object obj="6.0";
            System.out.println("type is ="+obj.getClass());

            obj=6.0;
            System.out.println("type is ="+obj.getClass());

            obj=6;
            System.out.println("type is ="+obj.getClass());
type is =class java.lang.String
type is =class java.lang.Double
type is =class java.lang.Integer