在Scala中将Java对象转换为Object[]

9

你好,我正在使用scala开发一款Android短信应用程序。一切都很顺利,唯一的问题是我不知道如何用scala编写以下Java代码。欢迎提供任何帮助。

//---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]);   

我必须承认,我不知道如何在Scala中编写Object[],它不是java.util.ArrayList[java.lang.Object]。我尝试使用Bundle.getStringArrayList获取List [String],然后对字符串进行getBytes,但是这并没有起作用......我的最后一次尝试是:

//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  

Java代码来源:http://mobiforge.com/developing/story/sms-messaging-android。感谢您的任何帮助。

2个回答

11
以下回答了标题中的问题,可能不是解决问题的最佳方法。仅供参考。
在Scala中,类型转换的字面意思是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)

然而,作为一项有趣的练习,为什么这会导致ClassCastException呢?

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

编程愉快


0

仅为完整起见,这是我根据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]()
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接