Skip to content

Document is hard to read #661

Description

@harrybin815
  1. Missing is a description of each component and its common methods (like TypePool, DynamicType, ClassLoadingStrategy etc.)
  2. Class calls may vary from version to version, such as the current version is:
package foo;
class Bar { }
class MyApplication {
  public static void main(String[] args) {
    TypePool typePool = TypePool.Default.ofClassPath();
    new ByteBuddy()
      .redefine(typePool.describe("foo.Bar").resolve(), // do not use 'Bar.class'
                ClassFileLocator.ForClassLoader.ofClassPath())
      .defineField("qux", String.class) // we learn more about defining fields later
      .make()
      .load(ClassLoader.getSystemClassLoader());
    assertThat(Bar.class.getDeclaredField("qux"), notNullValue());
  }
}

It was not compiled in 1.9.13, but the 1.9.13 version of the document could not be found. Try to change it to:

package foo;
class Bar { }
class MyApplication {
  public static void main(String[] args) {
    TypePool typePool = TypePool.Default.of(Thread.currentThread().getContextClassLoader());
    new ByteBuddy()
      .redefine(typePool.describe("foo.Bar").resolve(), // do not use 'Bar.class'
                ClassFileLocator.ForClassLoader.of(Thread.currentThread().getContextClassLoader()))
      .defineField("qux", String.class) // we learn more about defining fields later
      .make()
      .load(ClassLoader.getSystemClassLoader());
     assertThat(Bar.class.getDeclaredField("qux"), notNullValue());
  }
}

But in the end:

Exception in thread "main" java.lang.IllegalStateException: Class already loaded: foo.Bar

Much more complex than using javassist

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions