My original intention was to allow extension of the matchers. After giving it a second thought, I decided to mark them as final. The reason is the lack of static-typing checks for their constructors. They take Objects as arguments, and in many cases it should be Strings (e.g. name, title.) The reason for using Objects is to allow the use of ANY. If subclasses send the wrong argument, the matching can fail at runtime, instead of having the compiler to check for these errors. The type checking is perform in the static factory methods though.