2009-03-13 13 views
133

私は現在、Eclipseの「プルインターフェース」リファクタリング機能を使用して、既存のクラスに基づくインターフェースを作成しました。このダイアログボックスは、新しいインタフェースの新しいメソッドをすべて抽象メソッドとして作成するために提供されています。Javaインターフェイスメソッドを抽象として宣言するのはなぜですか?

これのメリットは何ですか?

私は、あなたが抽象としてインターフェイスメソッドを宣言することが許されたという事実は、特に奨励されていない言語の余分で無害な機能だと思いました。

Eclipseがこのようなスタイルをサポートするのはなぜですか?なぜ誰かが自発的にそのようなスタイルを選択するのですか?

明確化:インターフェイスメソッドが抽象的である理由はわかりませんが、それは明らかです。私はなぜ彼らが抽象的であるかを明示的に選択する理由を尋ねています。

答えて

140

Java Language Specificationによれば、インターフェイスのキーワードabstractは廃止されており、使用しないでください。 (第9.1.1.1項)

Javaの後方互換性の傾向から、abstractキーワードが存在するかどうかは、実際にはそれが変わることはありません。

+1

これは私の理解したことでした(しかし、私は特定のJLSセクションに精通していませんでした)。私はなぜEclipseが私にobseleteマーキングを作成するオプションを提供するのだろうかと思っています... – Uri

+0

私を得ました。あなたが知っているのは、その賢いオープンソースのタイプの1つです:) – jdmichal

+2

tsk tsk ... obseleteという警告なしで... – Uri

9

インターフェイスのJLSメソッドによれば、デフォルトでは抽象的なので、キーワードは冗長です。これを知って、私はそれを "プレゼンテーションの混乱を避けるために"使用することはない。

+0

これは正解です。更新された[リンク](http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html) - 「ノート」のセクションを参照 – mork

+0

JLSは、キーワードがインタフェースのメソッドでは廃止されているとは言いません。 「インターフェイスで宣言されたメソッドのpublic修飾子またはabstract修飾子を重複して指定することは、許可されていますが、スタイルの問題としては推奨されません」と述べています。 [JLS#9.4](http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.4)。 – EJP

+0

@EJP私はJLSがキーワードが時代遅れになると言っているとは言わなかった、これは私の個人的な意見だった;)BTWは、このキーワードは「重複している」と指摘している。コース。これを明確にするために答えを編集します。 – dhiller

38

日食中「というの聖職」(インタフェースメソッドの宣言に抽象を追加すること)は1.4以来jdt eclipse compiler in jdk1.3

古い互換性の問題となり、JDKライブラリが抽象クラスで(デフォルト抽象メソッドを含むなくなりましたインタフェースの実装)。
Eclipse 1.3コンパイラの診断は、その実装がその存在に依存しているので、これはだまされています。
Javac 1.3は、1.4ライブラリに対して(-bootclasspathオプションを使用して)実行することを完全に拒否することに注意してください。

Eclipseのコンパイラは1.4準拠レベルになる可能性があるので(Workbench>Preferences>Java>Compiler>JDK Complianceを参照)、または1.3準拠モードを使用している場合、少なくとも1.3クラスライブラリを使用し、「抽象」の存在は、現在のほとんどで必要とされていません日食プロジェクト。

+3

良い発見。したがって、Eclipseコンパイラではもう存在しない問題を回避する機能です。 – jdmichal

+1

@jdmichal:正確には、それはまた、ウリの質問に対するより正確な答えです。 – VonC

34

Java SE 7 JLS(Java言語仕様):「インタフェースで宣言されたメソッドの公開修飾子または抽象修飾子を重複して指定することは許可されていますが、スタイルの問題として推奨されません。

Java SE 5.0の場合: "古いバージョンのJavaプラットフォームとの互換性のために、インタフェースで宣言されたメソッドのための抽象修飾子をスタイルの問題として重複して指定することは許されていますが、推奨されません。

関連する問題