Java 8以降、default
メソッドがインターフェイスに導入されました。事実上、これはのすべてのメソッドがであるとinterface
は限らないことを意味しますabstract
。
Java 9(おそらく)以降、private
メソッドは許可されます。これは、のすべてのメソッドがであるとinterface
は限らないことを意味しますpublic abstract
。
「Javaインターフェイスのメソッドは、public
アクセス修飾子を付けて、または付けずに宣言する必要がありますか?」という質問 スタックオーバーフローで/programming/161633/should-methods-in-a-java-interface-be-declared-with-or-without-a-public-access-mで尋ねられました
そこでは、ほとんどの回答はpublic abstract
使用すべきではないと主張しました。なぜなら、のメソッドはinterface
以外のものではないからですpublic abstract
。もはやそうではありません。
インターフェースのこれらの新しい機能をpublic abstract
考慮して、Javaインターフェースメソッドの宣言でキーワードを使用する必要がありますか?
私の特定の環境では、経験豊富なソフトウェアエンジニアがJavaを経験していない人がいて、Javaコードを時々読んでいます。public abstract
キーワードを省略すると、インターフェースがこれらのキーワードを使用するためのさまざまなルールを持つようになった経緯に詳しくない人にとっては、さらなる混乱点が生じると思います。
abstract
複雑になりつつあるため、状況が変わる可能性があると考えました。Java 9では、同じ文は、「default
修飾子、static
修飾子、またはprivate
修飾子が欠けているインターフェースメソッドは暗黙的に抽象的です...」になります。さらに、キーワードを明示的に使用しないための補助引数、つまり、すべてのインターフェースメソッドはpublic abstract
、今では意味がありません。
stream
するがjava.util.Collection
、かMap.getOrDefault()
。別の方法は、新しいサブインターフェイスを作成し、Graphics2Dのように全員をダウンキャストさせることです。
default
修飾またはstatic
修飾子が暗黙的にされてabstract
...それが許可されていますが、スタイルの問題として、abstract
このようなメソッド宣言の修飾子を冗長に指定することは推奨されません。」なぜ物事は変わるはずだと思いますか?