java中接口多个实现类,如何指定实现类,根据子类类型选择实现方法

问题背景

在Java代码中,经常会遇到一个接口有多个实现的情况。而这些实现类的参数又是不同的子类,这时候我们该如何选择正确的实现方法呢?

解决方案

我们可以通过判断参数的子类类型来选择正确的实现方法。具体实现可以使用Java中的instanceof关键字,它可以判断一个对象是否是某个类的实例。

示例代码如下:

public interface MyInterface {
    void doSomething();
}

public class MyClassA implements MyInterface {
    public void doSomething() {
        System.out.println("MyClassA doSomething()");
    }
}

public class MyClassB implements MyInterface {
    public void doSomething() {
        System.out.println("MyClassB doSomething()");
    }
}

public class Test {
    public static void main(String[] args) {
        MyInterface obj1 = new MyClassA();
        MyInterface obj2 = new MyClassB();

        if (obj1 instanceof MyClassA) {
            ((MyClassA) obj1).doSomething();
        } else if (obj1 instanceof MyClassB) {
            ((MyClassB) obj1).doSomething();
        }

        if (obj2 instanceof MyClassA) {
            ((MyClassA) obj2).doSomething();
        } else if (obj2 instanceof MyClassB) {
            ((MyClassB) obj2).doSomething();
        }
    }
}

在上面的代码中,我们定义了一个接口MyInterface和两个实现类MyClassA和MyClassB。在Test类的main方法中,我们分别创建了一个MyClassA和一个MyClassB的实例,并使用instanceof关键字判断它们的类型,然后调用对应的doSomething方法。

第一种实现方式:直接粗暴的使用new关键字。 定义一个接口实现类,然后直接在调用的时候直接new实现类

第二种,使用注解。 用@Qualifier 通过这个标示,表明了哪个实现类才是我们所需要的,添加@Qualifier注解,需要注意的是@Qualifier的参数名称为我们之前定义@Service注解的名称之一。

总结

在Java代码中,一个接口有多个实现的情况下,我们可以通过判断参数的子类类型来选择正确的实现方法。使用instanceof关键字可以判断一个对象是否是某个类的实例,从而选择正确的实现方法。

posted @ 2024-04-15 17:48  木头左  阅读(278)  评论(0编辑  收藏  举报