ASM 4.0を使用してクラスの名前を変更しようとしています:
ClassReader reader = new ClassReader(
loader.getResourceAsStream("test/MyClass.class")
);
ClassWriter writer = new ClassWriter(reader, 0);
ClassVisitor visitor = new RemappingClassAdapter(visitor, new Remapper() { /* skipped */ });
reader.accept(visitor, 0);
return new ClassLoader() {
public Class<?> load(final String name, final byte[] bytes) {
return this.defineClass(name, bytes, 0, bytes.length);
}
}.load("test/MyClass", writer.toByteArray());
名前の変更部分は意図的にスキップしました。新しいクラスは、元のクラスの正確なコピーである必要があります。ありますが、古いものとして使用することはできません。
java.lang.ClassCastException: test.MyClass cannot be cast to test.MyClass
同じクラスローダーにとどまる方法は?