У меня есть абстрактный обобщенный класс решения "Foo", который наследуют мои конкретные реализации.Этот класс является универсальным и позволяет реализующему классу определять их конкретное значение PlanningEntity, которое расширяет "Bar"
. Это заглушает optaplanner, который выдает ошибку, подобную следующей:
SolutionProperty(список) не был клонирован, как ожидалось.FieldAccessingSolutionCloner не удалось распознать поле этого свойства, возможно, из-за того, что его имя отличается от другого.
Я попытался заменить «EntityType» конкретным реализующим классом, и кажется, что все работает.Однако я пытаюсь извлечь общие функциональные возможности, чтобы уменьшить объем обслуживания, и это мешает мне извлечь все общие черты.
Я также попытался прочесать документацию OptaPlanner.Я не смог найти пример, подобный этому.
@PlanningSolution
public abstract class Foo <EntityType extends Bar> implements Solution<HardMediumSoftScore>
{
protected HardMediumSoftScore score;
protected ArrayList<EntityType> list = new ArrayList<>();
@PlanningEntityCollectionProperty
public ArrayList<EntityType> getList()
{
return this.list;
}
@Override
public HardMediumSoftScore getScore()
{
return this.score;
}
public void setScore(HardMediumSoftScore score)
{
this.score = score;
}
}
Я ожидаю, что смогу наследовать без ошибок выброса optaplanner.
Настроен ли optaplanner для обработки обобщений / наследования?Я использую 6.5, есть ли более новая версия, которая поддерживает это лучше?