【问题标题】:Casting a java Object to Object[] in Scala在 Scala 中将 java 对象转换为 Object[]
【发布时间】:2011-09-13 19:19:00
【问题描述】:

您好,在 scala 中开发 Android SMS 应用程序一切顺利,但我只是找不到在 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 感谢您的帮助

【问题讨论】:

    标签: java android scala sms


    【解决方案1】:

    以下内容回答了标题中的问题,可能不是解决问题的最佳方法。物有所值。


    在 Scala 中一个 cast 的直译是 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]];    
    

    愉快的编码

    【讨论】:

    • 谢谢 pst,这正是我所需要的!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-24
      • 2014-07-16
      • 2022-11-01
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多