问题背景
在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关键字可以判断一个对象是否是某个类的实例,从而选择正确的实现方法。