Pregunta

Tengo una puesta problemas llamada inesperada en una tabla hash de la vieja escuela. ¿Qué está pasando aquí?

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, la pregunta sigue en pie como es, pero tengo una solución desagradable:

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}
¿Fue útil?

Solución

Eso interfaz properties parece ser una de esas API vieja escuela que son anteriores a los genéricos de Java. Esos subrayado en java.util.HashTable[_, _] son abreviaturas de tipos existenciales, el primero de los cuales (el tipo de clave) corresponde a la ?0 que aparece en el diagnóstico. Estos viejos tipos de Java "en bruto" son una costura desafortunado, visible en la interoperabilidad de Java Scala, aunque uno que por lo general aparece sólo en las API de edad muy avanzada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top