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}
È stato utile?

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
scroll top