Приведение Java-объекта к Object [] в Scala - PullRequest
8 голосов
/ 13 сентября 2011

Привет, работаю над приложением Android для SMS в scala. Все идет хорошо, ожидаю, что я просто не могу найти способ написать следующий код Java в 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]);   

Я должен признать, что не знаю, как написать Object [] в scala, это не 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 голосов
/ 13 сентября 2011

Следующее отвечает на вопрос в названии и может быть не лучшим способом решения проблемы. Возьми это за то, что оно стоит.


Дословный перевод актерского состава в 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 голосов
/ 20 сентября 2011

Просто для полноты вот что я написал с предложением 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]()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...