2011-05-19 13 views
9
[email protected]:~$ scala 
Welcome to Scala version 2.8.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_24). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> val jbool = java.lang.Boolean.TRUE  
jbool: java.lang.Boolean = true 

scala> val sbool = true   
sbool: Boolean = true 

scala> def sboolMethod(sbool: Boolean) = print("got scala.Boolean " + sbool)    
sboolMethod: (sbool: Boolean)Unit 

scala> sboolMethod(sbool) 
got scala.Boolean true 

scala> sboolMethod(jbool) 
<console>:9: error: type mismatch; 
found : java.lang.Boolean 
required: scala.Boolean 
     sboolMethod(jbool) 
       ^

scala> implicit def jbool2sbool(bool: java.lang.Boolean): scala.Boolean = bool.booleanValue 
jbool2sbool: (bool: java.lang.Boolean)Boolean 

scala> sboolMethod(jbool)                 
got scala.Boolean true 

La pregunta es: ¿por qué no hay una conversión implícita por defecto de java.lang.Boolean a scala.Boolean? La pregunta también significa java.lang.Long frente a scala.Long y probablemente otros tipos estándar (no los he probado todos).java.lang.Boolean a la pregunta scala.Boolean

Respuesta

12

En 2.9, existe tal conversión, presumiblemente para ayudar a la interoperabilidad con Java. (Scala no lo necesita por sí mismo, porque recubre y desempaqueta de forma transparente las primitivas, que es quizás la razón por la que no se incluyó anteriormente).