代码之家  ›  专栏  ›  技术社区  ›  Denys Kniazhev-Support Ukraine

Java:字节码中的新实例

  •  7
  • Denys Kniazhev-Support Ukraine  · 技术社区  · 15 年前
    ClassWriter cw = new ClassWriter(...);
    byte[] bytes = cw.toByteArray();
    

    我想从创建新的类实例 bytes 数组。我该怎么做?有可能吗?

    3 回复  |  直到 15 年前
        1
  •  8
  •   Sean Patrick Floyd    15 年前
        2
  •  2
  •   Amir Afghani    15 年前

    这是可能的,您需要使用反射来实现这一点。PSEDO代码为:

    final Class clazz = loadIntoCurrentClassLoader(bytes); //I'm assuming you wrote this already using defineClass
    
    final YourClass foo ;
    try {
        foo = (YourClass) clazz.newInstance();
    }
    catch (final Exception e) {
        throw new RuntimeException(e);
    }
    
        3
  •  0
  •   Michael Kay    15 年前

    我可以通过扩展类加载器和使用定义类来创建类。但是,创建的类将我的扩展类加载器作为它的类加载器,这会在我的类的代码加载其他类时导致失败。我可以通过创建我的类加载器来以正确的方式委托所有的东西来绕过这个问题,但是如何做到这一点并不明显。

    推荐文章