Java对象映射在传递给函数并用作字符串映射时,不会隐式地将对象转换为字符串
假设HashMap定义为: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作为
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