java在运行时加载ASM生成的类
我通过ASM编写了一些字节码(生成的类实现了一些已知的接口)
我还依赖于其他类
现在我想把字节数组连接到某个类中
如何从字节数组加载类
现在我得到NoClassDefFoundError:IllegalName:core/selector/ObjectSelector/codegen/testClass。阶级
我使用以下代码加载类:
@SuppressWarnings("unchecked")
private static <T> SelectorAccess<T> createNewOrNull(byte[] bytesOfClass, String name) {
try {
return (SelectorAccess<T>) new ClassLoader() {
public Class<?> defineClass(byte[] bytes) {
return super.defineClass(name.concat(".class"), bytes, 0, bytes.length);
}
}.defineClass(bytesOfClass).newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
return null;
}
}
我想这是因为我的类加载器不知道我的类的依赖关系
我怎样才能避免这个问题
# 1 楼答案
好吧,例外情况会指向它:“非法名称:core/selector/ObjectSelector/codegen/testClass.class”。这不是^{} 所期望的合法类名:
你可以看到这样的画面,这个方法需要一个不带
.class
后缀的点分隔名称。也就是说,如果类的类文件内部名称真的是core/selecter/ObjectSelector/codegen/testClass
,那么defineClass
的正确名称应该是core.selecter.ObjectSelector.codegen.testClass
但是,请注意,提到了将
null
传递给name
参数的可能性