Optaplanner ConstraintFactory.from返回未初始化实体问题求解
问题原因解释
该行为属于OptaPlanner的正常设计,核心是混淆了「未初始化规划实体」和「nullable规划变量取null值的已初始化实体」两个概念:
ConstraintFactory.from()方法只会过滤未完成初始化的规划实体,也就是规划变量还没有被分配任何合法值的实体。- 你在
lesson字段的@PlanningVariable注解中显式配置了nullable = true,相当于告知OptaPlanner:null是lesson变量的合法取值之一,此时lesson为null的Enrollment属于完全初始化完成的合法实体,自然会被from()方法返回,不会被过滤。
你新增非空过滤的写法是完全正确的,所有用到开启了nullable的规划变量的约束,都需要先判断变量非空再调用后续方法,避免空指针异常。
内容的提问来源于stack exchange,提问作者Radical
相关产品推荐
相关产品推荐

