Question

J'ai du mal à un appel inattendu mis sur une table de hachage de la vieille école. Qu'est-ce qui se passe ici?

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 question est toujours debout comme il est, mais j'ai une solution de contournement méchant:

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}
Était-ce utile?

La solution

Cette interface properties semble être l'une de ces API vieille école que les génériques Java avant la date. Ces traits de soulignement dans java.util.HashTable[_, _] sont raccourcis pour les types d'existence, le premier d'entre eux (le type de clé) correspond à la ?0 apparaissant dans le diagnostic. Ces vieux types Java « premières » sont une couture malheureuse, visible dans l'interopérabilité Java Scala, mais qui se manifeste généralement que dans les API très anciens.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top