El uso de Scala para llamar java.util.Hashtable # put
-
01-10-2019 - |
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}
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