2010-08-26 2 views
3

У меня возникла непредвиденная проблема, связанная с использованием хэш-таблицы старой школы. Что тут происходит?Использование scala для вызова java.util.Hashtable # 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} 

ответ

4

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

+3

Обычно это «нормально», чтобы придать им значения AnyRef по мере необходимости. Было бы удобно, если бы все эти «плохие» общие методы были задокументированы, и у компилятора была возможность исправить их для вас. – jsuereth

 Смежные вопросы

  • Нет связанных вопросов^_^