Package javassist.util.proxy
Class DefineClassHelper
java.lang.Object
javassist.util.proxy.DefineClassHelper
Helper class for invoking
ClassLoader.defineClass(String,byte[],int,int)
.- Since:
- 3.22
-
Method Summary
Modifier and TypeMethodDescriptionstatic Class<?>
Loads a class file byjava.lang.invoke.MethodHandles.Lookup
.static Class<?>
toClass
(MethodHandles.Lookup lookup, byte[] bcode) Loads a class file byjava.lang.invoke.MethodHandles.Lookup
.static Class<?>
toClass
(String className, Class<?> neighbor, ClassLoader loader, ProtectionDomain domain, byte[] bcode) Loads a class file by a given class loader.
-
Method Details
-
toClass
public static Class<?> toClass(String className, Class<?> neighbor, ClassLoader loader, ProtectionDomain domain, byte[] bcode) throws CannotCompileException Loads a class file by a given class loader.This first tries to use
java.lang.invoke.MethodHandle
to load a class. Otherwise, or ifneighbor
is null, this tries to usesun.misc.Unsafe
to load a class. Then it tries to use aprotected
method injava.lang.ClassLoader
viaPrivilegedAction
. Since the latter approach is not available any longer by default in Java 9 or later, the JVM argument--add-opens java.base/java.lang=ALL-UNNAMED
must be given to the JVM. If this JVM argument cannot be given,toPublicClass(String,byte[])
should be used instead.- Parameters:
className
- the name of the loaded class.neighbor
- the class contained in the same package as the loaded class.loader
- the class loader. It can be null ifneighbor
is not null and the JVM is Java 11 or later.domain
- if it is null, a default domain is used.bcode
- the bytecode for the loaded class.- Throws:
CannotCompileException
- Since:
- 3.22
-
toClass
Loads a class file byjava.lang.invoke.MethodHandles.Lookup
. It is obtained by usingneighbor
.- Parameters:
neighbor
- a class belonging to the same package that the loaded class belogns to.bcode
- the bytecode.- Throws:
CannotCompileException
- Since:
- 3.24
-
toClass
public static Class<?> toClass(MethodHandles.Lookup lookup, byte[] bcode) throws CannotCompileException Loads a class file byjava.lang.invoke.MethodHandles.Lookup
. It can be obtained byMethodHandles.lookup()
called from somewhere in the package that the loaded class belongs to.- Parameters:
bcode
- the bytecode.- Throws:
CannotCompileException
- Since:
- 3.24
-