2011-09-13 77 views
8

您好在scala上的Android SMS應用程序中工作良好,希望我只是不能找到在scala中編寫下面的java代碼的方法。任何幫助表示讚賞在Scala中將一個java對象投射到Object []

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

我必須承認,我不知道怎麼寫對象[]在斯卡拉它不是java.util.ArrayList中的[java.lang.Object繼承] 我已經使用Bundle.getStringArrayList得到一個嘗試列表[字符串]和做琴絃一個的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 感謝所有幫助

回答

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,這就是我需要的東西! – user433320

0

只是爲了completness這是我結束了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]() 
}