enum classes cannot override finalize method
http://java.sun.com/javase/6/jcp/beta/apidiffs/index-diffs.html
Java6のドキュメント見てたら、こんなのを見つけた。Java 5.0(fcs) と Java6 Beta のAPIドキュメントのDIFFをHTMLで見られるらしい。
ここで何となく"java.math.RoundingMode(enum)"を見たら、finalizeメソッドがObjectクラスからではなく、Enumから継承に変更になっている。5から6でこんな変更があったの?
実際にコンパイルを試してみた。コードは以下のものを使用。
public enum EnumClassesCannotHaveFinalizeMethods { ; protected void finalize() { } public static void main(String[] args) { System.out.println(EnumClassesCannotHaveFinalizeMethods.values()); } }
SunのJDKでは、1.5.0_13,1.6.0_03で試したら、
EnumClassesCannotHaveFinalizeMethods.java:8: 列挙型が finalize メソッドを持つことはできません。 protected void finalize() { ^ エラー 1 個
となった。しかし、Eclipse3.3.0で試したところ、Compiler&JRE=1.5だとコンパイル&実行できてしまった。Compiler&JRE=1.6だと、ライブラリのEnum.finalizeメソッドがfinalになっているので、"Cannot override..."となる。
とりあえず報告でした。