使用Scala调用java.util.Hashtable#put方法

3

我在使用旧版哈希表时遇到了意外的问题,这是怎么回事?

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}
1个回答

4

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


3
根据需要将它们转换为AnyRef值通常是“可以的”。如果所有这些“不良”的通用方法都有文档说明,并且编译器可以有一个选项来为您更正它们,那将非常方便。 - jsuereth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接