2016-08-03 5 views
2

Matcherは、「正規表現との一致の結果を決定するために使用されるクエリメソッドを含む」MatchResultを実装します。驚くべきことに、group(),group(int)およびgroupCount()MatchResultインターフェイスから利用できますが、group(String)は利用できません。MatchResultに名前付きグループのメソッドがないのはなぜですか?

これは見落としですか、互換性の理由からJava 7を使用していませんか?下位互換性のためのものであれば、Java 8のデフォルトのメソッドでは解決できませんでしたか?

+0

@Sanjeevあなたはさらに質問をしましたか?私は具体的に* MatchResultインタフェースについて質問しています*。 – shmosel

+1

合意されました。私の閉じる投票を取り下げました – Sanjeev

答えて

1

MatchResultインターフェイスがJava 1.5で追加されたのに対し、group(String)はJava 1.7で追加されたためです。

JavaのMatcher以外の実装がコンパイルされないため、group(String)をインターフェイスに追加することは大きな変更になります。 Javaの設計者は、一般的にそのようなインタフェースの変更を避けるので、それをしませんでした。

もっと興味深いのは、インターフェイスのデフォルトの実装を指定できるJava 1.8でこれを行っていない理由です。私の推測では、 "実装されていない"例外を除いて、そのような実装のための良いデフォルトがないということです。

+0

'UnsupportedOperationException'を投げることは合理的な選択肢のようです。また、これは前例のないことです.Iterator.remove()を参照してください(ただし、1.8より前であっても共通していました)。 – shmosel

+0

@shmosel 'Iterator.remove()'はオプションのオペレーションとしてマークされており、説明するのは簡単でした(すべてのイテレータが変更できるわけではありません)。 "歴史的な理由"を呼び出さずに 'group(String)'をオプションにすることを正当化することはより難しくなります。しかし、オラクルがこのメソッドを追加することを忘れてしまったことは驚きではありません。後で追加することもできます。 – dasblinkenlight

関連する問題