scala - 使用 scala 调用 java.util.Hashtable#put

标签 scala interop hashtable static-typing

我在调用老式哈希表上的 put 时遇到了意想不到的麻烦。这是怎么回事?

Welcome to Scala version 2.8.0.final (Java HotSpot(TM) Client VM, Java 1.6.0_21).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import com.ibm.mq._                 
import com.ibm.mq._

scala> MQEnvironment.properties                                                    
res1: java.util.Hashtable[_, _] = {}

scala> res1.put("transport", "MQSeries")
<console>:10: error: type mismatch;
 found   : java.lang.String("transport")
 required: ?0 where type ?0
       res1.put("transport", "MQSeries")
            ^

PS,问题仍然存在,但我有一个讨厌的解决方法:

scala> new java.util.Hashtable[String, String]
res10: java.util.Hashtable[String,String] = {}

scala> res10.put("transport", "MQSeries")      
res11: String = null

scala> MQEnvironment.properties = res10

scala> MQEnvironment.properties        
res13: java.util.Hashtable[_, _] = {transport=MQSeries}

最佳答案

properties 接口(interface)似乎是那些早于 Java 泛型的老式 API 之一。 java.util.HashTable[_, _] 中的那些下划线是存在类型的简写,其中第一个(键类型)对应于 ?0 中出现的诊断。这些旧的 Java“原始”类型是 Scala 的 Java 互操作性中一个不幸的、可见的缝隙,尽管它通常只出现在非常古老的 API 中。

关于scala - 使用 scala 调用 java.util.Hashtable#put,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3580232/

相关文章:

scala - 如何在 Scala 中进行简单的类型转换?

algorithm - 我的这种二分搜索实现是否总是能正常工作?

c# - 在另一台机器上注册 COM dll

c# - 使用互操作将哈希表传递给非托管代码

c# - 使用哈希表查找字符串中的字符

C++ 重新散列算法 vector

scala - 数据框上的平面图

c# - P/Invoke & InterOP 中是否有用于编码的匹配类型表?

c - SuperFastHash 为相同的字符串返回不同的哈希值,但前提是由不同的函数调用确定

scala - 如何在 scala 中获取(不可变和可变)集合的列表?