2011-08-16 24 views
7

scala.Serializableを使用していますが、String.asInstanceOf [Serializable]を呼び出すと、のクラスキャスト例外がスローされます。ここで私のコードは、かなり簡単です。java.lang.Stringはscala.Serializableにキャストできません

arguments.map(_.asInstanceOf[Serializable]) 

はい、引数はもちろん
の文字列の配列は、私は、このマニュアルに探して日食3.7とScalaの2.9.0-1

で日食のためのScala-IDEでアプリケーションを実行していますですscala doc

問題は今、java.lang.Stringではありませんのでです

+1

だからKiptonの答えは、この作業を行う方法を示しています。しかし、私はそれが有用なことである状況を考えることはできません。何をしようとしていても、それを行うためのより良い方法があります。 – Lachlan

+0

こんにちは、Jilen、ScalaDocを「scala.Serializable」という特性にリンクしました。しかし、 'java.lang.String'(ScalaDocには見つかりません)は' java.io.Serializable'を継承しています。 –

+0

ええ、あなたは正しいです。しかし... scala.Serializableは何のためのものなのですか...イベントは文字列をシリアル化できません。 – jilen

答えて

8

「何がscala.Serializableの典型的なユースケースである」でありますscala.Serializableを実装しないでください。 JavaからScalaへの依存関係はありません。

java.lang.Stringはjava.io.Serializableを実装しているので、キャストは必要ありませんが、省略したコンテキストではそれをクリアすることができます。リッキー・クラークソンが言ったことに追加するには

9

が、これは

scala> "hi".asInstanceOf[java.io.Serializable] 
res7: java.io.Serializable = hi 

に動作しますが、これはそうではない、Scalaでは資格なし

scala> "hi".asInstanceOf[scala.Serializable] 
java.lang.ClassCastException: java.lang.String cannot be cast to scala.Serializable 
... 

Serializablescala.Serializableを指します。 Scalaの文字列はjava.lang.Stringであることに注意してください。彼らはJVMに "ネイティブ"であり、Scalaについて知りません。 API docsによると、Scalaのシリアライズ可能な特性は、クロスプラットフォームの互換性(Javaと.NET)のために存在します。 JVMの上にいる場合は、java.io.Serializableで十分です。

関連する問題