AnyLogic中按总处理时间排序生产变体的生产线模拟优化问题
问题解决:AnyLogic中排序后List调用
take()编译报错 问题原因
你声明的sortedByTotalTimeAsc是原始类型List,未指定泛型参数(比如List<Variant>,Variant为你的代理类名)。编译器无法推断variantElement的具体类型,而enterKlemmenleiste.take()需要接收你的代理类型对象,因此触发编译错误。
而variants是AnyLogic的Population<Variant>(带泛型的集合),forEach执行时编译器能明确元素类型,所以可正常运行。
解决方案
将排序后的列表声明为带泛型的List,指定对应代理类的类型。
修正后的代码
System.out.println("Varaints:" + variants.toString()); // 返回未排序的代理群体 // 声明带泛型的List,替换Variant为你的实际代理类名 List<Variant> sortedByTotalTimeAsc = sortAscending(variants, v -> v.gesamt); System.out.println("sortedByTotalTimeAsc:" + sortedByTotalTimeAsc.toString()); // 按预期返回排序后的列表 System.out.println("sortedByTotalTimeAsc item 0 equals Varaints item 10 " + sortedByTotalTimeAsc.get(0).equals(variants.get(10))); // 返回true(列表和群体包含相同对象) // 现在可正常执行,无编译错误 sortedByTotalTimeAsc.forEach(variantElement -> { enterKlemmenleiste.take(variantElement); }); // 原代码无报错 variants.forEach(variantElement -> { enterKlemmenleiste.take(variantElement); });
补充说明
- 务必将代码中的
Variant替换为你实际创建的代理类名称(即variants群体对应的代理类型)。 - AnyLogic的
sortAscending方法传入带泛型的Population时,返回的是带泛型的List,但用原始类型List接收会丢失类型信息,导致后续方法调用的类型检查失败。
内容的提问来源于stack exchange,提问作者Mario
相关产品推荐
相关产品推荐

