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