库中的接口,不同应用程序中的实现,来自库

时间:2017-11-09 08:27:33

标签: java

我在库中有一个interface method,它由同一个库中的方法调用。实现在包括库的应用程序中。每个应用程序的实现都不同。要调用interface methodcalling method必须使用其已实施的interface实例化class。但由于calling method位于库中,因此它无法访问应用程序中的类。 calling method由后台服务启动,而不是由应用程序启动。

库中的接口:

public interface InterfaceA {
    void methodA();
}

实现接口的应用程序中的类:

public class ClassA implements InterfaceA {
    @Override
    public void methodA() {
        // do something
    }
}

库中调用接口方法的方法:

public void callInterface() {
    InterfaceA ia;
    ia.methodA(); // how to get this to work?
}

如何在不对应用程序中的interface method实现进行访问的情况下从库中调用interface?我无法从我的库中实例化接口,因为实现类位于库无法访问的应用程序中。

2 个答案:

答案 0 :(得分:0)

如果你有一个界面实例,你不需要做任何事情来使它工作:

public void callInterface(InterfaceA ia) {
    ia.methodA();
}

然后将此参数添加到调用此方法的库方法中,依此类推。当应用程序调用此方法时,它们可以传递它们的实现。

或者,如果您确实需要在方法中实例化接口,请添加另一个接口:

public void callInterface(Supplier<InterfaceA> iaSupplier) {
    InterfaceA ia = iaSupplier.get();
    ia.methodA();
}

请参阅https://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html

  

调用方法由后台服务启动,而不是由应用程序启动。

什么启动了后台服务?您需要为应用程序添加一些方法以将实现传递给它。

或者,你可以使用SPI(https://docs.oracle.com/javase/tutorial/ext/basics/spi.html)但它可能有点过分。

答案 1 :(得分:0)

public void callInterface() {
    InterfaceA ia;
    ia.methodA(); // how to get this to work?
}

上面应该会导致编译问题。

库函数应该将接口InterfaceA作为参数作为参数,如另一个答案中所示。或者如果它是无状态实现,则在使用包含此方法的Class时传递它。