I want to validate my domain objects before I pass them on to a other part of the system. All the objects that I want to validate share the same interface. The problem is that I can't figure out how to write this in a good way. I don't want to move the validation inside my value object. But I don't want to be forced to do a instanceOf-check either.

An example:

public interface Vehicle {}

public class Car implements Vehicle {}

public class MotorBike implements Vehicle {}

public interface VehicleValidator {
    void validate();

}

public class CarValidator implements VehicleValidator {

    @Override
    public void validate() {}
}

public class MotorBikeValidator implements VehicleValidator {

    @Override
    public void validate() {}
}

public void process(Vehicle vehicle) {
    //TODO: validate vehicle
    doSomething(vehicle);
}

In Scala I would have done something similar to http://debasishg.blogspot.se/2010/06/scala-implicits-type-classes-here-i.html But those language constructs is not possible in Java.

Edit
Report