Java 如何从库中调用主程序中的类?
我需要编写多个程序,它们共享公共功能/资源。我想看看我是否能把这些程序的大部分放进图书馆。情况如下: ProgA、ProgB和ProgC是使用libX的程序 libX有一个类XYZ,它将实例化一个类ABC ProgA、ProgB和ProgC都有ABC类的不同实现Java 如何从库中调用主程序中的类?,java,android,Java,Android,我需要编写多个程序,它们共享公共功能/资源。我想看看我是否能把这些程序的大部分放进图书馆。情况如下: ProgA、ProgB和ProgC是使用libX的程序 libX有一个类XYZ,它将实例化一个类ABC ProgA、ProgB和ProgC都有ABC类的不同实现 我如何构建我的程序来实现这一点?我曾试图做研究,但找不到答案。提前感谢…您可以在库中声明一个公共接口ABCInterface,该接口包含库操作所需的所有方法。然后,您的不同程序将声明它们实现此接口的类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中没有。我不知道确切的术语,只能说指向该接口的指针(即接口的字段)