2016-08-03 1 views
2

MatcherMatchResult을 구현하며 "정규 표현식과의 일치 결과를 결정하는 데 사용되는 쿼리 방법을 포함합니다." 놀랍게도 group(), group(int)groupCount()MatchResult 인터페이스를 통해 사용할 수 있지만 group(String)은 사용할 수 없습니다.MatchResult에 명명 된 그룹에 대한 메소드가없는 이유는 무엇입니까?

호환성을 이유로 Java 7을 보지 않았습니까? 이전 버전과의 호환성을 위해서라면 Java 8의 기본 메소드로 해결되지 않았습니까?

+0

@Sanjeev 혹시이 질문을 읽으셨습니까? 나는 * MatchResult 인터페이스 *에 대해 구체적으로 묻고있다. – shmosel

+1

동의 함 .. 내 가까운 투표를 취소했습니다 – Sanjeev

답변

1

group(String)은 Java 1.7이 추가 된 반면 MatchResult 인터페이스는 Java 1.5에 추가 되었기 때문입니다.

Matcher 외부의 다른 구현이 컴파일되지 않기 때문에 group(String)을 인터페이스에 추가하는 것은 큰 변화였습니다. Java 디자이너는 일반적으로 인터페이스 변경을 피할 수 있으므로 그렇게하지 않았습니다.

더 흥미로운 질문은 Java 1.8에서 인터페이스의 기본 구현을 지정할 수없는 이유입니다. 내 생각에 "구현되지 않은"예외를 제외하고는 그러한 구현에 대한 적절한 기본 값이 없다는 것입니다.

+0

'UnsupportedOperationException'을 던지는 것은 합리적인 선택처럼 보입니다. 그리고 전례가있는 것도 아닙니다. Iterator.remove()를보십시오. (비록 1.8 이전의 경우도 일반적 이었음을 알았지 만). – shmosel

+0

@shmosel'Iterator.remove()'는 선택적 연산으로 표시되어 있으며 설명하기 쉽습니다 (모든 반복자가 수정을 허용하지는 않습니다). "역사적인 이유"를 불러 일으키지 않고'group (String)'을 선택적으로 만드는 것을 정당화하는 것이 더 어려울 것이다. 오라클이이 방법을 추가하는 것을 잊어 버렸지 만 나중에는 추가 할 것이라고 놀랄 일은 아닙니다. – dasblinkenlight

관련 문제