gpt4 book ai didi

Java 从现有依赖项调用未知代码或方法

转载 作者:行者123 更新时间:2023-12-01 22:03:04 25 4
gpt4 key购买 nike

我有两个独立的项目“基本”和“扩展”,具有以下设置

项目A:

class Handler {
public void handle(){
...
}
}

项目B

import Handler; //from Proejct A

class SomeClass{
someMethod() {
handle(); //dependency to Project As class with handle method
}
}

所以问题是对handle方法的依赖,该方法存在于项目A中,但在项目B的编译时不存在。

最后一步是将项目扩展构建为 jar 并将其导入到项目基本中。

Ofc,当我构建项目 B 时,编译器会给出错误,因为句柄在编译时未知。

对于这个问题我需要一个解决方案:

或者:告诉java缺少的代码(带有句柄方法的导入类)将在运行时存在。

或者可能是由于工厂模式而导致的依赖注入(inject)。我熟悉工厂模式,但我不明白它在这种情况下如何帮助我。

或者其他解决方案。

你能帮我吗?

最佳答案

这些都不是有效的 Java - 无法编译。正确的关键字是“class”,而不是“Class”。

一旦你得到正确的结果,你必须在编译时提供它 - 你别无选择。没有办法解决这个问题。

也许您应该查看 Java JDK 并遵循 examplejava.sql包中:接口(interface)。 ConnectionResultSetStatement等都是接口(interface),因此供应商可以提供自己的实现。用户只处理接口(interface)。

您的GenericHandler应该是您提供给客户端的接口(interface)。他们添加自己的实现并在运行时添加包含自定义实现的 JAR 文件。

所有扩展实现的基本接口(interface):

public interface GenericHandler {
void genericHandle();
}

扩展代码:

import GenericHandler;

public class Extension implements GenericHandler {
public void genericHandle() {
// Do something useful here
}
}

只有当您提供有限的、封闭的实现集时,工厂模式才有效:

public class GenericHandlerFactory {
private final GenericHandlerFactory instance = new GenericHandlerFactory();

private GenericHandlerFactory() {}

public GenericHandler getInstance() { return this.instance; }

public GenericHandler createHandler(Class genericHandlerClass) {
GenericHandler result = null;
// Code to create the GenericHandler you want.
return result;
}
}

如果用户可以在您不知情的情况下扩展您的界面,那么工厂就无法工作;您必须坚持使用 JDBC 示例。

关于Java 从现有依赖项调用未知代码或方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33389760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com