デフォルト実装の構文

今現在デフォルト実装の構文は

void method() default {}

のように

修飾子 戻り値の型 メソッド名(引数) throws節 default ブロック

となっています。

元々はブロックのところにstaticメソッドを指定していました。そして、この構文がアノテーションのデフォルト値を指定するときの構文に倣ったものであるという事は過去にも書いたとおりです。

staticメソッドを指定していた頃はdefaultがあの位置にあってもおかしくはなかったのですが、ブロックを指定するようになってからはやや不自然になり、むしろ修飾子の部分にあるべきでは無いかという意見が出だしました。
そこでつい先日、次の二つのdefaultのうちどちらが自然かというアンケートが行われました。

void method() default {} // 今現在の物
default void method() {} // defaultが修飾子にある物

ちなみに前者のdefaultの意味合いは実装について言及していて、後者は(staticやabstractの様に)メソッドの種類について言及しているという風に解釈できます。

そしてその結果が出ました。

void method() default {} // 1,369票(29.3%)
default void method() {} // 3,307票(70.7%)

修飾子の位置に書くのが圧勝しましたので、将来的に構文がそのように変更されると思います。

今回アンケートの対象には含まれませんでしたが、そもそもdefaultというキーワードを用いず、デフォルトメソッドは

void method() {}

と書けばよいのではないかという意見もあります。これについてはアンケートの後に(つまりこれから)議論が行われるようです。