如何定义抽象方法使不同实现类可接收不同类型输入参数且无需手动强转
解决方案
你需要的效果可以通过给抽象父类/接口定义泛型参数实现,既可以约束方法的通用规则,也能让实现类直接拿到指定类型的入参,不需要手动做类型转换。
完整示例代码
1. 定义带泛型的抽象父类
// 两个泛型参数T、U分别对应dostuff方法的两个入参类型 public abstract class BaseHandler<T, U> { // 抽象方法统一约束规则:必须是两个入参、无返回值的dostuff方法 public abstract void dostuff(T o1, U o2); }
2. 第一个实现类(入参为Integer、Double)
public class Handler1 extends BaseHandler<Integer, Double> { @Override public void dostuff(Integer o1, Double o2) { // 此处o1、o2已经是对应类型,无需手动强转,直接写业务逻辑即可 } }
3. 第二个实现类(入参为Double、Integer)
public class Handler2 extends BaseHandler<Double, Integer> { @Override public void dostuff(Double o1, Integer o2) { // 此处o1、o2已经是对应类型,无需手动强转,直接写业务逻辑即可 } }
方案优势
- 编译期类型校验:类型不匹配会直接在编译阶段报错,避免运行时类型转换异常
- 无需手动强转:实现类的方法参数直接是指定的具体类型,不需要额外写类型转换代码
- 统一规则约束:抽象层统一约定了方法的入参数量、返回值类型,所有实现类都必须遵守该规则
注:你给出的示例代码中
Iteger为拼写错误,实际正确写法是Integer。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

