2011-09-13 3 views
8

スカラーのすべてのスマートフォンでAndroid SMSアプリケーションを開発していて、スカラで次のJavaコードを書く方法が見つからないと思っています。すべてのヘルプはScalaの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]); 

は私が[] Scalaではオブジェクトの書き方を知らない認めなければならない感謝のではない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

のTh次のように、タイトルの質問に答え、問題に近づく最善の方法ではないかもしれません。それが価値あるものであればそれを取ってください。


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

これは私がPSTの提案を書いてしまったものですただ、completnessため

+0

ありがとうPST、私は必要なもののthats! – user433320

0

コーディングハッピー:

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]() 
} 
関連する問題