在Java中调用接口的特定实现类

时间:2017-12-28 03:59:34

标签: java interface interface-implementation

我正在尝试构建一个简单的API,其中我有一个接口AnimalService,其实现类是LionImplTigerImplElephantImplAnimalServicegetHome()方法 我有一个属性文件,其中包含我正在使用的动物类型 喜欢,

animal=lion

因此,根据我使用的动物类型,当我调用我的API(getHome()中的AnimalService)时,应执行特定实现类的getHome()方法。

我怎样才能做到这一点?

提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以通过创建包含枚举的Factory类来实现此目的,例如

public static AnimalServiceFactory(){

    public static AnimalService getInstance() { // you can choose to pass here the implmentation string or just do inside this class
        // read the properties file and get the implementation value e.g. lion
        final String result = // result from properties
        // get the implementation value from the enum
        return AnimalType.getImpl(result);
    }

    enum AnimalType {
        LION(new LionImpl()), TIGER(new TigerImpl()), etc, etc;

        AnimalService getImpl(String propertyValue) {
            // find the propertyValue and return the implementation
        }
    }
}

这是一个高级代码,未针对语法错误等进行测试。

答案 1 :(得分:2)

您正在描述Java polymorphism的工作原理。以下是与您的说明相对应的一些代码:

<强> AnimalService.java

public interface AnimalService {
    String getHome();
}

<强> ElephantImpl.java

public class ElephantImpl implements AnimalService {
    public String getHome() {
        return "Elephant home";
    }
}

<强> LionImpl.java

public class LionImpl implements AnimalService {
    public String getHome() {
        return "Lion home";
    }
}

<强> TigerImpl.java

public class TigerImpl implements AnimalService {
    public String getHome() {
        return "Tiger home";
    }
}

<强> PolyFun.java

public class PolyFun {
    public static void main(String[] args) {
        AnimalService animalService = null;

        // there are many ways to do this:
        String animal = "lion";
        if (animal.compareToIgnoreCase("lion")==0)
            animalService = new LionImpl();
        else if (animal.compareToIgnoreCase("tiger")==0)
            animalService = new TigerImpl();
        else if (animal.compareToIgnoreCase("elephant")==0)
            animalService = new ElephantImpl();

        assert animalService != null;
        System.out.println("Home=" + animalService.getHome());
    }
}

有关详细信息,请参阅https://www.geeksforgeeks.org/dynamic-method-dispatch-runtime-polymorphism-java/