The LocaleMatcher has a Builder class, that has a build() method, and that creates a new matcher using a private constructor that takes the builder.
In Java, this seems fine as is. In C++ where build() returns a matcher by value, this can cause the matcher to be built and then immediately "moved". If the from-Builder constructor was public, one could type a little less and avoid the move.
Possible downside: Two ways of making a matcher from a builder.