CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第7章 Nashorn JavaScript エンジンの活用 : 問題 4 : string から java.lang.String へキャスト

問題

文字列から部分文字列を抽出することで、リテラルでない JavaScript の文字列を生成し、それに対してgetClassメソッドを呼び出せ

次にjava.lang.String.class.castメソッドへ渡せ
このとき何が起こるか?

解答

リテラルでない JavaScript の文字列の型

jjs> var a = 'abcdefg'.substr(3, 3)
jjs> a
def
jjs> typeof a
string
jjs> a.getClass()
class java.lang.String

java.lang.Stringにキャスト

jjs> var b = java.lang.String.class.cast(a)
jjs> b
def
jjs> typeof b
string
jjs> b.getClass()
class java.lang.String

リテラルでない JavaScript の文字列の型もjava.lang.Stringだったので、特に何も起きない

さらに問題

それが起きた原因は何か?

解答

こんな質問が出るってことは、キャストでエラーが起きないといけないんだろうか?

例えば、リテラルでない JavaScript の文字列はjava.lang.Objectで、キャストではClassCastExceptionが throw されるとか…

java.lang.ClassCastException: Cannot cast java.lang.Object to java.lang.String

ん~、よく分かりません