in src/main/java/com/ql/util/express/instruction/op/OperatorArray.java [23:46]
public OperateData executeInner(InstructionSetContext parent, ArraySwap list) throws Exception {
OperateData firstOperateData = list.get(0);
if (firstOperateData == null || firstOperateData.getObject(parent) == null) {
throw new QLException("对象为null,不能执行数组相关操作");
}
Object tmpObject = firstOperateData.getObject(parent);
if (!tmpObject.getClass().isArray()) {
Object property = list.get(1).getObject(parent);
//支持data.get(index) ->data[index]
if (tmpObject instanceof List && property instanceof Number) {
int index = ((Number)property).intValue();
return OperateDataCacheManager.fetchOperateDataArrayItem(firstOperateData, index);
}
//支持data.code -> data['code']
if (property instanceof String || property instanceof Character) {
return OperateDataCacheManager.fetchOperateDataField(tmpObject, String.valueOf(property));
}
}
//支持原生Array:data[index]
int index = ((Number)list.get(1).getObject(parent)).intValue();
return OperateDataCacheManager.fetchOperateDataArrayItem(firstOperateData, index);
}