我在调用老式哈希表时遇到了意外的麻烦。这是怎么回事?
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}
答案 0 :(得分:4)
properties
接口似乎是早于Java泛型的旧式API之一。 java.util.HashTable[_, _]
中的那些下划线是存在类型的缩写,第一个(键类型)对应于诊断中出现的?0
。这些旧的Java“原始”类型在Scala的Java互操作性中是一个不幸的,可见的缝隙,尽管通常只出现在非常旧的API中。