Scala允许调用java.util.HashMap获取带有错误参数数量的方法
发布时间:2020-12-16 08:59:54 所属栏目:安全 来源:网络整理
导读:在交互式 scala控制台中运行以下代码 val map = new java.util.HashMap[String,Integer]();map.put("key1",5)"Test " + map.get("key1") + " " + map.get() + " " + map.get("key1","key2") + " " + map.get("key1","key2","key3") 返回以下内容 Test 5 null
在交互式
scala控制台中运行以下代码
val map = new java.util.HashMap[String,Integer](); map.put("key1",5) "Test " + map.get("key1") + " " + map.get() + " " + map.get("key1","key2") + " " + map.get("key1","key2","key3") 返回以下内容 Test 5 null null null 我希望这个代码在除第一次调用之外的所有调用get参数的调用中都会导致编译器错误.为什么这个成功编译并返回null? 解决方法
Java映射不是类型安全的,特别是get方法具有以下签名:
public V get(Object key); 所以你可以用任何东西作为钥匙.在Scala中,您会看到所谓的自动翻译,这在Scala 2.11中已被弃用,所以如果使用-deprecation编译项目,您将看到: [warn] ... Adaptation of argument list by inserting () has been deprecated: leaky (Object-receiving) target makes this especially dangerous. [warn] signature: HashMap.get(x$1: Any): V [warn] given arguments: <none> [warn] after adaptation: HashMap.get((): Unit) [warn] "Test " + map.get("key1") + " " + map.get() + " " + map.get("key1","key3") [warn] ^ 您可以使用-Xfuture编译器标志将其转换为错误: [error] ... Adaptation of argument list by inserting () has been removed. [error] signature: HashMap.get(x$1: Any): V [error] given arguments: <none> [error] "Test " + map.get("key1") + " " + map.get() + " " + map.get("key1","key3") [error] ^ 自动翻译意味着map.get()将被视为map.get(()),而map.get(“key1”,“key2”)将被视为map.get((“key1”,“key2”) ). 我建议使用Scala自己的集合类型,除非你有一个非常特别的理由不这样做. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |