超全模态模型 × Harness 升级,升级解锁 ArkClaw,最新支持 DeepSeek-V4 系列与 GLM-5.1
Java泛型具有不变性,ArrayList<Burger>并非ArrayList<Object>的子类——即使Burger继承自Object也不例外。直接将ArrayList<Burger>传入要求ArrayList<Object>的put方法,会触发编译错误。
ArrayList<Burger>
ArrayList<Object>
Burger
Object
put
有两种简洁方式实现存入操作:
创建新的ArrayList<Object>并导入原集合元素,这种方式类型安全且无警告:
ArrayList<Burger> allBurgers = (ArrayList<Burger>) burgerServ.allBurgers(); // 转换为ArrayList<Object> ArrayList<Object> burgerObjectList = new ArrayList<>(allBurgers); thisModelInfo.put("burger", burgerObjectList);
如果不想创建新集合,可强制转换为ArrayList<Object>,但会触发unchecked警告,需用注解抑制:
@SuppressWarnings("unchecked") ArrayList<Object> burgerObjectList = (ArrayList<Object>) (ArrayList<?>) allBurgers; thisModelInfo.put("burger", burgerObjectList);
要避免硬编码模型Service,实现动态加载不同模型类,可借助Spring的自动注入多实现类特性:
创建基础Service接口,所有模型的Service都实现此接口:
public interface BaseModelService<T> { List<T> getAllItems(); }
修改BurgerService和UserService实现该接口:
BurgerService
UserService
@Service public class BurgerService implements BaseModelService<Burger> { @Override public List<Burger> getAllItems() { return this.allBurgers(); // 复用原有逻辑 } } @Service public class UserService implements BaseModelService<User> { @Override public List<User> getAllItems() { return this.allUsers(); // 复用原有逻辑 } }
在控制器中注入Map<String, BaseModelService<?>>,Spring会自动将所有实现BaseModelService的Bean存入Map,Key为Bean名称(默认类名首字母小写,如burgerService):
Map<String, BaseModelService<?>>
BaseModelService
burgerService
@Autowired private Map<String, BaseModelService<?>> modelServiceMap;
通过配置模型名称列表(可从配置文件读取),遍历获取对应Service并加载数据:
// 可从配置文件读取或作为参数传入,实现动态切换 List<String> targetModels = Arrays.asList("burgerService", "userService"); for (String modelServiceName : targetModels) { BaseModelService<?> service = modelServiceMap.get(modelServiceName); if (service != null) { List<?> modelList = service.getAllItems(); ArrayList<Object> objectList = new ArrayList<>(modelList); // 处理模型Key,比如去掉Service后缀 String modelKey = modelServiceName.replace("Service", ""); thisModelInfo.put(modelKey, objectList); allModelInfo.add(thisModelInfo); } }
后续新增模型时,只需创建对应Model类和实现BaseModelService的Service类,无需修改控制器核心逻辑,即可动态加载新模型数据。
内容的提问来源于stack exchange,提问作者Ash Gharibyan
超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起
模型再升级,30秒超长叙事, 模态参考扩容
模型自由,工具不限,最新支持 Deepseek-V4 系列、GLM-5.3 系列
超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列
大模型19元起,Al应用9.9元畅享,新人首购爆款尽享优惠