gpt4 book ai didi

java - 使用字节数组中的类而不进行反射?

转载 作者:行者123 更新时间:2023-12-01 17:37:59 25 4
gpt4 key购买 nike

我已经使用 ASM 检测了我的类并像这样处理它

public class MyClassLoader extends ClassLoader {
...
byte[] classBytes = ... //the class is of type com.mypackage.Test
Class clazz = defineClass("com.mypackage.Test", classBytes, 0, classBytes.length);
resolveClass(clazz);
com.mypackage.Test test =(com.mypackage.Test) clazz.newInstance();

但是我在最后一行得到 ClassCastException:

java.lang.ClassCastException: com.mypackage.Test cannot be cast to com.mypackage.Test

解决方法是使用反射:

Object test = clazz.newInstance();
test.getClass().getMethods()[0].invoke(test, null); //invoke some method - successfully

我是否使用了错误的类加载器或其他东西?

最佳答案

Class.newInstance 是一个反射调用。

在这些情况下,您通常会做的就是让类加载器成为加载现有代码的类加载器的子加载器。让实现类实现代码的类加载器中的接口(interface)。使用 Class.asSubclass 使 Class 成为接口(interface)的已知子类型。通过Class.getConstructor.newInstance构造实现类的实例。

使用此技术,您不依赖于使用反射来选择方法,尽管它确实需要无参数构造函数。

关于java - 使用字节数组中的类而不进行反射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4355197/

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