Utilizzando scala chiamare java.util.Hashtable # put
-
01-10-2019 - |
Domanda
Ho un inaspettato put guai chiamata su una tabella hash vecchia scuola. Che cosa sta succedendo qui?
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 questione si trova ancora come, ma ho una soluzione brutta:
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}
Soluzione
Questa interfaccia properties
sembra essere una di quelle API vecchia scuola con data antecedente generici Java. Quei sottolineature in java.util.HashTable[_, _]
sono abbreviazioni per i tipi esistenziali, il primo dei quali (il tipo di chiave) corrisponde alla ?0
che compare nella diagnostica. Questi vecchi Java tipi "grezzi" sono uno sfortunato, cuciture visibili nella interoperabilità Java di Scala, anche se quello che di solito si presenta solo in molto vecchie API.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow