Использование scala для вызова java.util.Hashtable # put - PullRequest
3 голосов
/ 27 августа 2010

У меня неожиданная проблема с вызовом, включенным в хеш-таблицу старой школы.Что здесь происходит?

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 голосов
/ 27 августа 2010

Этот properties интерфейс, по-видимому, является одним из тех старых API-интерфейсов, которые предшествовали дженерикам Java.Эти подчеркивания в java.util.HashTable[_, _] являются сокращениями для экзистенциальных типов, первый из которых (тип ключа) соответствует ?0, фигурирующему в диагностике.Эти старые «сырые» типы Java - неудачный, видимый шов в совместимости Java Scala, хотя обычно он появляется только в очень старых API.

...