• ベストアンサー

キャスト時に使う括弧について

クラスAはBを継承しているとします。 そこで、bにはクラスAのインスタンスがるとして、 キャストするときは、 String str = ((A)b).getString(); のようにするかと思いますが、 String str = (((A))b).getString(); のように不要に括弧を書いて、コンパイルがエラーになる場合というか、 エラーになるコンパイラのバージョンがあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Object o = new String(); String s = (((String))o).substring(0,1); を1.4.2_12でコンパイルしたところ、エラーになりました。 -------------------------------------------------- hoge.java:11: ')' がありません。         String s = (((String))o).substring(0,1);                    ^ エラー 1 個 -------------------------------------------------- 「^」は「o」のとこにあります。

ratsbane
質問者

お礼

ウェブスフィアーではエラーになってくれないのはなぜでしょうか? javaのバージョンによるんでしょうか? 1.4.2_12はダメなんですね。 ありがとうございます!

ratsbane
質問者

補足

私も試してみましたが、私のPCにはjava1.4.1_02が入っているので、 エラーになりませんでした。 質問時に試した環境は1.3でした。

その他の回答 (1)

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.2

実はキャストは演算子です。 "(型名)"で一つの演算子という扱いになります。(+や*と同じ扱い) 演算子だけを括弧で括っても式を評価できないので、"((型名))"はコンパイルエラーになります。 1 + 1 を 1 (+) 1 と表記してコンパイルエラーになるのと同じ理屈です。

ratsbane
質問者

お礼

エラーにならないjavaのバージョンがあるようです。 今私が使用している1.3だと思うのですが、それではエラーになってくれません。 ありがとうございます!

関連するQ&A