Selector::isValid() is currently used by callers before creating a Selector. In all those cases an exception is thrown if it is not valid. It would be cleaner if the Selector constructor handled that check and itself threw the exception.
However, there may be cases where a Selector is constructed without this check, including in third-party code...