Well, tell me what happen if I do the following without this check in the validator:

``` php
<?php

$validator = new HasValidCredentialsValidator();
$validator->validate('foo', new Constraint);
```

The signature of the validate method allows me to pass any kind of value to the validate method, the least is to check that this value is supported.

If you look at the validator class without the framework, one should also check that Constraint argument is an instance of the expected Constraint. With Symfony2, this is ensured by the validator service definition, but nothing prevent someone to manually instanciate the validator and pass any fancy constraint to the validate method.