2011-09-13 22 views
8

Hola trabajando en una aplicación de Android con Android en scala alls va bien espero que no encuentre la manera de escribir el siguiente código Java en Scala. Cualquier ayuda aprecióLanzar un Objeto java al Objeto [] en Scala

//---retrieve the SMS message received--- 
    Object[] pdus = (Object[]) bundle.get("pdus"); 
    msgs = new SmsMessage[pdus.length];    
     for (int i=0; i<msgs.length; i++){ 
      msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 

debo admitir que no sé cómo escribir Object [] en la Scala no es java.util.ArrayList [java.lang.Object] He intentado usar el Bundle.getStringArrayList para obtener una lista [String] y hacer un getBytes en las cuerdas, pero que no funciona ... Mi último intento fue:

//I know I should be using an Option ... 
def getSmsListFromIntent(intent:Intent):List[SmsMessage]= { 
    val bundle = intent.getExtras() 
    var ret:List[SmsMessage]= null 
    if (bundle != null) 
     ret= for { pdu <- bundle.getStringArrayList("pdus").toList } yield 
SmsMessage.createFromPdu(pdu.getBytes()) 
    else ret= List() 
    ret 

código de java viene de: http://mobiforge.com/developing/story/sms-messaging-android Gracias por cualquier ayuda

Respuesta

11

Th El siguiente responde la pregunta en el título y puede no ser la mejor manera de abordar el problema. Tomalo por lo que vale.


La traducción literal de un elenco en Scala es asInstanceOf:

var x: Object = Array("foo", "bar"); 
var y = x.asInstanceOf[Array[Object]];  
>> x: java.lang.Object = Array(foo, bar) 
>> y: Array[java.lang.Object] = Array(foo, bar) 

Sin embargo, como un ejercicio divertido, ¿por qué este resultado en un ClassCastException?

var x: Object = Array(1, 2); 
var y = x.asInstanceOf[Array[Object]];  

feliz de codificación

+0

Gracias pst, eso es lo que necesitaba! – user433320

0

Sólo por completitud esto es lo que terminé escribiendo con la sugerencia de pst:

def getSmsListFromIntent(intent:Intent)= { 
    val bundle = intent.getExtras() 
     if (bundle != null) { 
     bundle.get("pdus") 
       .asInstanceOf[Array[Object]] 
       .map(pdu => SmsMessage.createFromPdu(pdu.asInstanceOf[Array[Byte]])) 
     } else Array[SmsMessage]() 
}