AnyLogic从数据库读参数值:供应链仿真源数量设置报错
解决AnyLogic中静态引用非静态字段的错误(设置收获品类源数量上限)
错误原因
Cannot make a static reference to the non static field MyFile.harvest 本质是你试图通过代理类名MyFile直接访问非静态字段harvest,但harvest属于MyFile类的实例对象,而非类本身,静态上下文(比如直接在属性框写类名访问)不允许这种操作。
具体解决步骤
1. 加载数据为MyFile实例集合
在主代理(如Main)中定义List类型变量:
List<MyFile> harvestData;
然后在主代理的onStartup事件中初始化数据(根据你的数据源选择加载方式):
// 从数据库加载 harvestData = databaseRead(MyFile.class); // 或从Excel加载 harvestData = excelRead(MyFile.class, "你的Excel文件名.xlsx", "Sheet1");
2. 为各品类Source设置数量上限
针对芒果的Source,在「Maximum number of agents」属性中填写:
findFirst(harvestData, data -> data.harvest.equals("芒果")).demand
(将demand替换为你存储需求数量的实际列名)
针对西瓜的Source,同理修改为:
findFirst(harvestData, data -> data.harvest.equals("西瓜")).demand
3. 额外排查点
- 验证数据加载:在
onStartup中添加打印语句确认数据已加载:traceln(harvestData.size()); - 类型转换:若需求字段是字符串类型,需转为整数:
Integer.parseInt(findFirst(harvestData, data -> data.harvest.equals("芒果")).demand) - 单实例直接引用:若每个品类对应唯一的MyFile实例,可定义单个实例变量(如
MyFile mangoData),初始化后直接用mangoData.demand
内容的提问来源于stack exchange,提问作者Ehsan Ul Haque
相关产品推荐
相关产品推荐

