問題背景
在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關鍵字可以判斷一個物件是否是某個類的例項,從而選擇正確的實現方法。