Enum<?>にキャストしようとするとコンパイルエラー"変換できない型"が発生する
こちらの例にあるように、
public class Test { enum Planet { EARTH, MARS } public static void main(String[] args) { Enum<?> e1 = Planet.EARTH; // Hmm, doesn't compile Planet e2 = (Planet) e1; // Well this compiles, but it's not pretty! Planet e3 = (Planet) (Object) e1; // So does this .... Planet e4 = (Planet) (Enum) e1; } }
をコンパイルすると、7行目(Enum<?>の部分)で"変換できない型(inconvertible types)"というエラーが発生する。
どうやら原因はSun JDK6のバグだそうで、JDK7では解消されている[追記: JDK6u18以降でも対応された]。
今回のようなバグは、Eclipse上で開発を行ってEclipseのコンパイラを使い続けていると全く気付かず、さあjarに固めようか、といってAntでjavacすると...というようなタイミングで発覚するので性質が悪い。
NetBeansなら保存時の自動コンパイルでも(少なくともWindowsでは)デフォルトでSunコンパイラを使用するため、早期発見しやすいのではないかと思う(最終成果物はSunコンパイラでコンパイルすることが大半だろう、という前提の下で)。
一応、Eclipseもビルダーの設定を行えば保存時コンパイルにSun JDKを使用するようにも出来るようだが。
« TrlLogEditor 1.1 | トップページ | FEST-Swingを利用する(6) 非EDTでのSwingアクセスを検証する »
この記事へのコメントは終了しました。
トラックバック
この記事へのトラックバック一覧です: Enum<?>にキャストしようとするとコンパイルエラー"変換できない型"が発生する:
» NetBeans7上でJDK7を用いてEclipseと結果が異なっていたコンパイラの挙動を確認する [雪羽の発火後忘失]
JDK7はこちらからダウンロードできる最新版(Build 141)を使用しました。なお、NetBeans7のリリースニュースで出ていた”JDK7デベロッパプレビュー版”というのはおそらくこちらのBuild 140ではないかと思いますので、若干バージョンが違います。 NetBeans実行に用いるJDKを変更するには、以前のエントリ NetBeansはどうやってjava.exeを探すのか: 雪羽の発火... [続きを読む]
« TrlLogEditor 1.1 | トップページ | FEST-Swingを利用する(6) 非EDTでのSwingアクセスを検証する »
コメント