我想在将域对象传递给系统的其他部分之前验证它们。我要验证的所有对象共享相同的接口。问题是我无法弄清楚如何以一种好的方式编写它。我不想在我的值对象中移动验证。但我也不想被迫进行 instanceOf-check。
一个例子:
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);
}
在 Scala 中,我会做类似于http://debasishg.blogspot.se/2010/06/scala-implicits-type-classes-here-i.html 但这些语言结构在 Java 中是不可能的。