gpt4 book ai didi

java - 具有隐藏构造函数的抽象类的实例

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

我需要创建一个带有隐藏构造函数的抽象类的实例,该类如下所示:

public abstract class TestClass {
/**
* @hide
*/
public TestClass() {
}
}

创建具体类不起作用,因为构造函数不可见,通过反射 API 调用构造函数也不起作用,因为该类是抽象的。

我需要创建一个 android.print.PrintDocumentAdapter.LayoutResultCallback 实例

最佳答案

我遇到了完全相同的问题(甚至对于完全相同的类),我有一个比其他答案中建议的用 framework.jar 替换 android.jar 更好的解决方案。

该解决方案使用 dexmaker library . (您将需要 dexmaker.1.4.jar 和 dexmaker-dx.1.4.jar)。这是一个在运行时为 Dalvik VM(android 中使用的 VM)生成字节码的库。

这个库有一个名为 ProxyBuilder 的类,它为抽象类生成一个代理。代理是一个扩展抽象类并通过将方法分派(dispatch)给您指定的java.lang.reflect.InvocationHandler 实例来实现方法的对象。

ProxyBuilder 几乎与 java.lang.refect.Proxy 相同,除了 java.lang.refect.Proxy 仅适用于接口(interface),而 dexmaker 的 ProxyBuilder 适用于抽象类,这正是我们解决问题所需要的。

代码全部为:

public static PrintDocumentAdapter.LayoutResultCallback getLayoutResultCallback(InvocationHandler invocationHandler,
File dexCacheDir) throws IOException{
return ProxyBuilder.forClass(PrintDocumentAdapter.LayoutResultCallback.class)
.dexCache(dexCacheDir)
.handler(invocationHandler)
.build();
}

回调逻辑在您提供的invocationHandler 中实现。cacheDir 是 dexmaker 可以存放一些文件的目录。

关于java - 具有隐藏构造函数的抽象类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29353382/

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