Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从库中调用主程序中的类?_Java_Android - Fatal编程技术网

Java 如何从库中调用主程序中的类?

Java 如何从库中调用主程序中的类?,java,android,Java,Android,我需要编写多个程序,它们共享公共功能/资源。我想看看我是否能把这些程序的大部分放进图书馆。情况如下: ProgA、ProgB和ProgC是使用libX的程序 libX有一个类XYZ,它将实例化一个类ABC ProgA、ProgB和ProgC都有ABC类的不同实现 我如何构建我的程序来实现这一点?我曾试图做研究,但找不到答案。提前感谢…您可以在库中声明一个公共接口ABCInterface,该接口包含库操作所需的所有方法。然后,您的不同程序将声明它们实现此接口的类ABC,并将引用传递给库的方法 如果

我需要编写多个程序,它们共享公共功能/资源。我想看看我是否能把这些程序的大部分放进图书馆。情况如下:

ProgA、ProgB和ProgC是使用libX的程序

libX有一个类XYZ,它将实例化一个类ABC

ProgA、ProgB和ProgC都有ABC类的不同实现


我如何构建我的程序来实现这一点?我曾试图做研究,但找不到答案。提前感谢…

您可以在库中声明一个公共接口
ABCInterface
,该接口包含库操作所需的所有方法。然后,您的不同程序将声明它们实现此接口的类
ABC
,并将引用传递给库的方法

如果需要在库中实例化类(一次或多次),可以将引用传递给工厂,而不是类实例本身。下面的代码可能会让您了解如何实现这些功能

// Library code
interface ABCInterface {
    public int getValue();
}

interface ABCFactory {
    public ABCInterface createInstance();
}

class Library {
    public static void doWork(ABCFactory factory) {
        ABCInterface obj = factory.createInstance();
        System.out.println(obj.getValue());
    }
}


// Program code
class Program {
    class ABCImplementation implements ABCInterface {
        @Override
        public int getValue() {
            return 42;
        }
    }

    public void useLibrary() {
        Library.doWork(new ABCFactory() {
            @Override
            public ABCInterface createInstance() {
                return new ABCImplementation();
            }
        });
    }
}

看来你需要创造一个新的世界
在这种情况下,您需要libX有一个指向接口ABC的指针,该接口ABC具有您希望libX使用的所有功能,然后,progA、progB和progC必须实现此接口

启动程序时,您需要转到共享库,并使用以下已知方法将正在运行的程序注入库中:

setProgram(IMyInterface interface) { 
    this.interface = interface; 
}

这样,当您想要运行已知的响应操作时,您可以运行
this.interface.doSomething()
,就是这样。

您只需拥有一个基本的库
接口ABC
,它提供了一个允许您的
XYZ
类与类
a
交互的接口,
B
C
都实现了
接口ABC

public interface ABC {
    public void method1();
    public void method2();
}
public class XYZ {
    private ABC abc;
    public XYZ(ABC abc) { this.abc = abc; }
}
然后,您的库类只需要对实现
接口ABC
的对象进行引用

public interface ABC {
    public void method1();
    public void method2();
}
public class XYZ {
    private ABC abc;
    public XYZ(ABC abc) { this.abc = abc; }
}
然后您的
A
B
C
实现要么实现
ABC
,要么创建动态实现ABC的对象


对我来说,这听起来很像一个回调方案。Yor库需要一种标准的方式将结果传达给具体的实现
ABC
基本上是一个事件处理程序接口。

我认为你应该重新表述你的问题,因为“需要创建类的类”没有意义,除非你打算动态创建一个类,这在Android上是没有意义的。那么你的意思是“创建一个实例”还是你脑子里想的是什么。希望效果更好。下面有多个正确答案。接受一个最接近我实现的。谢谢大家。Howard-问题是实例化需要由此时处于控制状态的库来完成。这可能吗?@Aviral您可以使用工厂方法模式并传递工厂,请参见我的编辑。没有接口实例,至少在JAVA中没有。我不知道确切的术语,只能说指向该接口的指针(即接口的字段)