如何用单一方法同时接收MyInter实例或其列表并简化实现?
合并单个元素与列表的write方法解决方案
你可以通过泛型+类型判断的方式把两个重载方法合并成一个,既支持单个MyInter实例,也支持T extends Iterable<? extends MyInter>类型的集合(包括List、Set等),同时避免泛型过于宽泛的问题。
实现代码示例
public <T> void write(T input) { // 判断是否为单个MyInter实例 if (input instanceof MyInter) { writeSingleElement((MyInter) input); } // 判断是否为可迭代的MyInter集合 else if (input instanceof Iterable<?>) { Iterable<?> iterable = (Iterable<?>) input; for (Object obj : iterable) { if (obj instanceof MyInter) { writeSingleElement((MyInter) obj); } else { throw new IllegalArgumentException("集合中包含非MyInter类型元素"); } } } // 处理非法输入 else { throw new IllegalArgumentException("仅支持MyInter实例或MyInter类型的集合"); } } // 抽取公共的单个元素处理逻辑,原重载方法的核心逻辑统一放这里 private void writeSingleElement(MyInter element) { // 写入操作的核心逻辑 }
逻辑说明
- 用泛型
T作为参数类型,但通过instanceof做严格类型校验,避免泛型范围过宽 - 将原两个方法的重复逻辑抽取到私有方法中,彻底消除代码冗余
- 增加非法参数判断,提前拦截不符合要求的输入
使用方式
// 传入单个元素 MyInter single = new MyImpl(); write(single); // 传入列表 List<MyInter> list = Arrays.asList(new MyImpl(), new MyImpl()); write(list);
内容的提问来源于stack exchange,提问作者Hamvy B
相关产品推荐
相关产品推荐

