Я попытался реализовать это в Java, и это прошло без проблем и остатка UnsatisfiedBy (). Вероятно, у вас есть проблемы в вашей реализации, вот моя:
public boolean isSpecialCaseOf(Specification spec) {
if (spec instanceof GreaterThan) {
return ((GreaterThan) spec).boundary > this.boundary;
}
return false;
}
Подвох заключается в методе Not (), который должен правильно конструировать противоположный тип своего аргумента.
static final Specification Not(Specification spec) {
return spec.not();
}
Тогда все, что мне нужно, это иметь правильную реализацию not () для каждой спецификации, например, для LesserThan:
@Override
public Specification not() {
return new GreaterThan(boundary);
}
Если у вас есть какие-либо проблемы, пожалуйста, предоставьте вашу реализацию GreatherThan.isSpecialCaseOf и Not, я постараюсь помочь.