根据不同类型 父类进去子类

假设有一个基类Base和几个继承自Base的子类Sub1、Sub2等,每个子类都会把自己的实例注入到一个静态的Map中。

首先,定义基类和子类:

public class Base {
    // 抽象方法,子类需要实现
    public void doSomething() {
        throw new UnsupportedOperationException("Should be implemented in subclasses");
    }
}
 
public class Sub1 extends Base {
    @Override
    public void doSomething() {
        // 实现具体的操作
    }
 
    public static final String TYPE = "Sub1";
 
    public Sub1() {
        // 注册自己到静态Map中
        Registry.register(TYPE, this);
    }
}
 
public class Sub2 extends Base {
    @Override
    public void doSomething() {
        // 实现具体的操作
    }
 
    public static final String TYPE = "Sub2";
 
    public Sub2() {
        // 注册自己到静态Map中
        Registry.register(TYPE, this);
    }
}

然后,定义用于注册实例的Registry类:

import java.util.HashMap;
import java.util.Map;
 
public class Registry {
    private static final Map<String, Base> registry = new HashMap<>();
 
    public static void register(String type, Base instance) {
        registry.put(type, instance);
    }
 
    public static Base getInstance(String type) {
        return registry.get(type);
    }
}

最后,可以根据类型来获取对应的实例并调用方法:


public class Main {
    public static void main(String[] args) {
        Base sub1 = Registry.getInstance("Sub1");
        Base sub2 = Registry.getInstance("Sub2");
 
        if (sub1 != null) {
            sub1.doSomething();
        }
 
        if (sub2 != null) {
            sub2.doSomething();
        }
    }
}

这个例子中,我们定义了一个基类Base和两个子类Sub1和Sub2。每个子类在构造时会把自己注册到Registry的静态map中,并提供了一个doSomething的实现。然后,我们可以通过Registry来获取对应类型的实例并调用它们的方法。这个例子展示了如何根据类型自动调用对应子类的方法,而无需手动判断类型并进行类型转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值