gpt4 book ai didi

java - JNI - 是否可以用不同的类替换类的实例化?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:43:43 24 4
gpt4 key购买 nike

我为这个没有描述性的标题道歉,但我不确定如何用一句话概括它。我拥有的是一个较旧的 DLL 文件,它从 java 中的默认包调用所有内容。我不能在没有反射的情况下从默认包中导入这些类,我也需要重构它们。问题是我没有 DLL 的源代码而且不可能得到它。我创建了一个重定向所有方法调用的中间 dll。例如,在 Java 中,我调用 refactoredMethod,它在中间 DLL 中调用 refactoredMethod,而中间 DLL 在原始 DLL 中调用 originalMethod。在原始 DLL 尝试执行如下操作之前,此方法工作正常:

jclass cls = (*env)->FindClass(env, "UnpackagedClass");

但显然,由于我重构了此类并将其移至包中,因此失败了。所以我想知道是否有可能替换

的所有实例
jclass cls = (*env)->FindClass(env, "UnpackagedClass");

在原始 DLL 中有

jclass cls = (*env)->FindClass(env, "com/test/RefactoredClass");

从中间 DLL 内部。顺便说一下,在有人说什么之前,由于它的大小,不可能重写原始 DLL,除此之外不需要任何维护,我有使用它的权限。谢谢。

最佳答案

如果您没有机会更改原始 DLL,请考虑使用适配器模式。

如果您想将一个界面适配到另一个界面,可以使用此模式。

我知道这可能会在您的 Java 实现中创建很多类,但如果您别无选择,我会这样做。

看看从包内部访问类的超简单适配器:

https://github.com/mkowsiak/jnicookbook/tree/master/recipes/recipeNo028

关于java - JNI - 是否可以用不同的类替换类的实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43750610/

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