java中介面多個實現類,如何指定實現類,根據子類型別選擇實現方法

木头左發表於2024-04-15

問題背景

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

相關文章