2012-03-07 3 views
11

Eclipseの藍と、ソートの、enumの、javacのはそれを嫌って、それを愛し、これは働いていました!他のクラスは、タイプIの参照でgetName()を呼び出すことができます。実際のjavacは、enumにgetName()などのことはないと主張して、それを拒否しました。これは単なるEclipseのバグですか?EclipseはJavaの1.6</p> Eclipseで <pre><code>public interface I { String getName(); } /* and in another file */ public enum E implements I { E1() { String getName() { return "foo"; } }; } </code></pre> <p>、それはインターフェース

これについては、列挙子のメソッド定義です。私は普通のことをすれば、EclipseとJavacの両方でうまく動作し、enumの最後に関数を定義してフィールドの値を返すようにします。

+1

これは許可する必要があります。この質問は関連しています:http://stackoverflow.com/questions/2709593/why-would-an-enum-implement-an-interface 'javac'エラーは何ですか? –

+0

+1。 :-) –

+2

また、 'Eclipse Indigo SR1'でこれをチェックしています。これはhttp://stackoverflow.com/questions/9505857/workaround-for-javac-compilation-order-bug-in-maven – Nicocube

答えて

1

まずは@yshavitに同意します。

そうでない場合はこの1つに関連することができます:Workaround for javac compilation order bug in maven

私はそれが関連する名前の順序だと思います。インタフェースAの名前を変更しようとすると、最初にコンパイルされ、動作するはずです。

12

getName()E1は、publicである必要があります。これが問題の原因ですか?それ以外の場合、パブリックメソッド(インターフェイスで宣言されたすべてのメソッドはpublic)をオーバーライドしようとしていますが、これは許可されていないpackage-privateメソッドです。

1

インターフェイスメソッドは公開スコープです。列挙型の可視性レベルを上げると、コンパイルが正常に行われます。副次的なことに、私のバージョンのEclipse(Mac OS X 10.7.2、JDK 1.6で動作するIndigo)では、コードにコンパイルエラーが表示されます。

0

Eclipseは独自のパーサとコンパイラを実装しています。このコンパイラは、そのエディタに密接にバインドされた出力を提供します。通常、非常にうまく動作します。ただし、新しい言語機能が有効になると、コンパイラは新しい言語機能の実装に遅れがちになります。

javacコマンドラインは、Oracle/SUNからjavacを取得していると仮定すると(ほとんど)正しいです。

yshavitの答えは、Eclipseでコンパイルしてはいけない理由を識別するために最も良い方法です。今、私はそれが修正されていると思っています(そして、Eclipseで正しくコンパイルされません)。

関連する問題

 関連する問題