类 ClassUtils

java.lang.Object
cn.taketoday.util.ClassUtils

public abstract class ClassUtils extends Object
从以下版本开始:
2018-06-0? ?
作者:
Juergen Hoeller, Keith Donald, Rob Harrop, Sam Brannen, TODAY
另请参阅:
  • 字段详细资料

    • CGLIB_CLASS_SEPARATOR

      public static final String CGLIB_CLASS_SEPARATOR
      The CGLIB class separator: "$$".
      另请参阅:
    • NESTED_CLASS_SEPARATOR

      private static final char NESTED_CLASS_SEPARATOR
      The nested class separator character: '$'.
      另请参阅:
    • INNER_CLASS_SEPARATOR

      public static final char INNER_CLASS_SEPARATOR
      另请参阅:
    • ARRAY_SUFFIX

      public static final String ARRAY_SUFFIX
      Suffix for array class names: "[]".
      另请参阅:
    • INTERNAL_ARRAY_PREFIX

      public static final String INTERNAL_ARRAY_PREFIX
      Prefix for internal array class names: "[".
      另请参阅:
    • NON_PRIMITIVE_ARRAY_PREFIX

      public static final String NON_PRIMITIVE_ARRAY_PREFIX
      Prefix for internal non-primitive array class names: "[L".
      另请参阅:
    • CLASS_FILE_SUFFIX

      public static final String CLASS_FILE_SUFFIX
      另请参阅:
    • primitiveTypes

      public static HashSet<Class<?>> primitiveTypes
      从以下版本开始:
      3.0
    • primitiveWrapperTypeMap

      private static final IdentityHashMap<Class<?>,Class<?>> primitiveWrapperTypeMap
      Map with primitive wrapper type as key and corresponding primitive type as value, for example: Integer.class -> int.class.
    • primitiveTypeToWrapperMap

      private static final IdentityHashMap<Class<?>,Class<?>> primitiveTypeToWrapperMap
      Map with primitive type as key and corresponding wrapper type as value, for example: int.class -> Integer.class.
    • primitiveTypeNameMap

      private static final HashMap<String,Class<?>> primitiveTypeNameMap
      Map with primitive type name as key and corresponding primitive type as value, for example: "int" -> "int.class".
    • commonClassCache

      private static final HashMap<String,Class<?>> commonClassCache
      Map with common Java language class name as key and corresponding Class as value. Primarily for efficient deserialization of remote invocations.
    • javaLanguageInterfaces

      private static final Set<Class<?>> javaLanguageInterfaces
      Common Java language interfaces which are supposed to be ignored when searching for 'primary' user-level interfaces.
  • 构造器详细资料

    • ClassUtils

      public ClassUtils()
  • 方法详细资料

    • registerCommonClasses

      private static void registerCommonClasses(Class<?>... commonClasses)
      Register the given common classes with the ClassUtils cache.
    • getDefaultClassLoader

      @Nullable public static ClassLoader getDefaultClassLoader()
      Return the default ClassLoader to use: typically the thread context ClassLoader, if available; the ClassLoader that loaded the ClassUtils class will be used as fallback.

      Call this method if you intend to use the thread context ClassLoader in a scenario where you clearly prefer a non-null ClassLoader reference: for example, for class path resource loading (but not necessarily for Class.forName, which accepts a null ClassLoader reference as well).

      返回:
      the default ClassLoader (only null if even the system ClassLoader isn't accessible)
      从以下版本开始:
      4.0
      另请参阅:
    • overrideThreadContextClassLoader

      @Nullable public static ClassLoader overrideThreadContextClassLoader(@Nullable ClassLoader classLoaderToUse)
      Override the thread context ClassLoader with the environment's bean ClassLoader if necessary, i.e. if the bean ClassLoader is not equivalent to the thread context ClassLoader already.
      参数:
      classLoaderToUse - the actual ClassLoader to use for the thread context
      返回:
      the original thread context ClassLoader, or null if not overridden
      从以下版本开始:
      4.0
    • isPresent

      public static boolean isPresent(String className)
      Determine whether the Class identified by the supplied name is present and can be loaded. Will return false if either the class or one of its dependencies is not present or cannot be loaded.

      use default class loader

      参数:
      className - the name of the class to check
      返回:
      whether the specified class is present (including all of its superclasses and interfaces)
      抛出:
      IllegalStateException - if the corresponding class is resolvable but there was a readability mismatch in the inheritance hierarchy of the class (typically a missing dependency declaration in a Jigsaw module definition for a superclass or interface implemented by the class to be checked here)
    • isPresent

      public static boolean isPresent(String className, @Nullable ClassLoader classLoader)
      Determine whether the Class identified by the supplied name is present and can be loaded. Will return false if either the class or one of its dependencies is not present or cannot be loaded.
      参数:
      className - the name of the class to check
      classLoader - the class loader to use (may be null which indicates the default class loader)
      返回:
      whether the specified class is present (including all of its superclasses and interfaces)
      抛出:
      IllegalStateException - if the corresponding class is resolvable but there was a readability mismatch in the inheritance hierarchy of the class (typically a missing dependency declaration in a Jigsaw module definition for a superclass or interface implemented by the class to be checked here)
    • resolvePrimitiveClassName

      @Nullable public static Class<?> resolvePrimitiveClassName(@Nullable String name)
    • forName

      public static <T> Class<T> forName(String name, @Nullable ClassLoader classLoader) throws ClassNotFoundException, LinkageError
      Replacement for Class.forName() that also returns Class instances for primitives (e.g. "int") and array class names (e.g. "String[]"). Furthermore, it is also capable of resolving nested class names in Java source style (e.g. "java.lang.Thread.State" instead of "java.lang.Thread$State").
      参数:
      name - the name of the Class
      classLoader - the class loader to use (may be null, which indicates the default class loader)
      返回:
      a class instance for the supplied name
      抛出:
      ClassNotFoundException - if the class was not found
      LinkageError - if the class file could not be loaded
      从以下版本开始:
      2.1.7
      另请参阅:
    • doForName

      private static Class<?> doForName(String name, @Nullable ClassLoader classLoader) throws ClassNotFoundException, LinkageError
      抛出:
      ClassNotFoundException
      LinkageError
    • forName

      public static <T> Class<T> forName(String name) throws ClassNotFoundException
      Replacement for Class.forName() that also returns Class instances for primitives (e.g. "int") and array class names (e.g. "String[]"). Furthermore, it is also capable of resolving nested class names in Java source style (e.g. "java.lang.Thread.State" instead of "java.lang.Thread$State").

      use default class loader

      参数:
      name - the name of the Class
      返回:
      a class instance for the supplied name
      抛出:
      ClassNotFoundException - when class could not be found
      从以下版本开始:
      2.1.6
    • resolveClassName

      public static <T> Class<T> resolveClassName(String className, @Nullable ClassLoader classLoader) throws IllegalArgumentException
      Resolve the given class name into a Class instance. Supports primitives (like "int") and array class names (like "String[]").

      This is effectively equivalent to the forName method with the same arguments, with the only difference being the exceptions thrown in case of class loading failure.

      参数:
      className - the name of the Class
      classLoader - the class loader to use (may be null, which indicates the default class loader)
      返回:
      a class instance for the supplied name
      抛出:
      IllegalArgumentException - if the class name was not resolvable (that is, the class could not be found or the class file could not be loaded)
      IllegalStateException - if the corresponding class is resolvable but there was a readability mismatch in the inheritance hierarchy of the class (typically a missing dependency declaration in a Jigsaw module definition for a superclass or interface implemented by the class to be loaded here)
      从以下版本开始:
      4.0
      另请参阅:
    • load

      @Nullable public static <T> Class<T> load(String name)
      Load class
      类型参数:
      T - return class type
      参数:
      name - class full name
      返回:
      class if not found will returns null
    • load

      @Nullable public static <T> Class<T> load(String name, @Nullable ClassLoader classLoader)
      Load class with given class name and ClassLoader
      类型参数:
      T - return class type
      参数:
      name - class full name
      classLoader - use this ClassLoader load the class
      返回:
      null if cannot load
    • getClassName

      public static String getClassName(ClassReader r)
    • getClassName

      public static String getClassName(byte[] classFile)
    • getClassName

      public static String getClassName(Resource resource) throws IOException
      抛出:
      IOException
    • getClassName

      public static String getClassName(InputStream inputStream) throws IOException
      抛出:
      IOException
    • isJavaLanguageInterface

      public static boolean isJavaLanguageInterface(Class<?> ifc)
      Determine whether the given interface is a common Java language interface: Serializable, Externalizable, Closeable, AutoCloseable, Cloneable, Comparable - all of which can be ignored when looking for 'primary' user-level interfaces. Common characteristics: no service-level operations, no bean property methods, no default methods.
      参数:
      ifc - the interface to check
      从以下版本开始:
      4.0
    • isInnerClass

      public static boolean isInnerClass(Class<?> clazz)
      Determine if the supplied class is an inner class, i.e. a non-static member of an enclosing class.
      返回:
      true if the supplied class is an inner class
      从以下版本开始:
      4.0
      另请参阅:
    • isStaticClass

      public static boolean isStaticClass(Class<?> clazz)
      Determine if the supplied class is a static class.
      返回:
      true if the supplied class is a static class
      从以下版本开始:
      4.0
      另请参阅:
    • isLambdaClass

      public static boolean isLambdaClass(Class<?> clazz)
      Determine if the supplied Class is a JVM-generated implementation class for a lambda expression or method reference.

      This method makes a best-effort attempt at determining this, based on checks that work on modern, main stream JVMs.

      参数:
      clazz - the class to check
      返回:
      true if the class is a lambda implementation class
      从以下版本开始:
      4.0
    • getUserClass

      public static <T> Class<T> getUserClass(T synthetic)
      If the class is dynamically generated then the user class will be extracted in a specific format.
      参数:
      synthetic - Input object
      返回:
      The user class
      从以下版本开始:
      2.1.7
    • getUserClass

      public static <T> Class<T> getUserClass(Class<T> syntheticClass)
      If the class is dynamically generated then the user class will be extracted in a specific format.
      参数:
      syntheticClass - input test class
      返回:
      The user class
      从以下版本开始:
      2.1.7
    • getUserClass

      @Nullable public static <T> Class<T> getUserClass(String name)
      If the class is dynamically generated then the user class will be extracted in a specific format.
      参数:
      name - Class name
      返回:
      The user class
      从以下版本开始:
      2.1.7
    • getDescriptiveType

      @Nullable public static String getDescriptiveType(@Nullable Object value)
      Return a descriptive name for the given object's type: usually simply the class name, but component type class name + "[]" for arrays, and an appended list of implemented interfaces for JDK proxies.
      参数:
      value - the value to introspect
      返回:
      the qualified name of the class
    • getGenerics

      @Nullable public static Class<?>[] getGenerics(Class<?> type, Class<?> superClass)
      Find generics in target class
      参数:
      type - find generics in target class
      superClass - A interface class or super class
      返回:
      Target generics Classs
      从以下版本开始:
      3.0
    • getQualifiedMethodName

      public static String getQualifiedMethodName(Method method)
      Return the qualified name of the given method, consisting of fully qualified interface/class name + "." + method name.
      参数:
      method - the method
      返回:
      the qualified name of the method
    • getQualifiedMethodName

      public static String getQualifiedMethodName(Method method, @Nullable Class<?> clazz)
      Return the qualified name of the given method, consisting of fully qualified interface/class name + "." + method name.
      参数:
      method - the method
      clazz - the clazz that the method is being invoked on (may be null to indicate the method's declaring class)
      返回:
      the qualified name of the method
    • isSimpleType

      public static boolean isSimpleType(Class<?> clazz)
      Tells us if the class passed in is a known common type
      参数:
      clazz - The class to check
      返回:
      True if the class is known
    • getAllInterfaces

      public static Class<?>[] getAllInterfaces(Object instance)
      Return all interfaces that the given instance implements as an array, including ones implemented by superclasses.
      参数:
      instance - the instance to analyze for interfaces
      返回:
      all interfaces that the given instance implements as an array
      从以下版本开始:
      3.0
    • getAllInterfacesForClass

      public static Class<?>[] getAllInterfacesForClass(Class<?> clazz)
      Return all interfaces that the given class implements as an array, including ones implemented by superclasses.

      If the class itself is an interface, it gets returned as sole interface.

      参数:
      clazz - the class to analyze for interfaces
      返回:
      all interfaces that the given object implements as an array
      从以下版本开始:
      3.0
    • getAllInterfacesForClass

      public static Class<?>[] getAllInterfacesForClass(Class<?> clazz, @Nullable ClassLoader classLoader)
      Return all interfaces that the given class implements as an array, including ones implemented by superclasses.

      If the class itself is an interface, it gets returned as sole interface.

      参数:
      clazz - the class to analyze for interfaces
      classLoader - the ClassLoader that the interfaces need to be visible in (may be null when accepting all declared interfaces)
      返回:
      all interfaces that the given object implements as an array
      从以下版本开始:
      3.0
    • toClassArray

      public static Class<?>[] toClassArray(Collection<Class<?>> collection)
      Copy the given Collection into a Class array.

      The Collection must contain Class elements only.

      参数:
      collection - the Collection to copy
      返回:
      the Class array
      从以下版本开始:
      3.0
      另请参阅:
    • getAllInterfacesAsSet

      public static Set<Class<?>> getAllInterfacesAsSet(Object instance)
      Return all interfaces that the given instance implements as a Set, including ones implemented by superclasses.
      参数:
      instance - the instance to analyze for interfaces
      返回:
      all interfaces that the given instance implements as a Set
      从以下版本开始:
      3.0
    • getAllInterfacesForClassAsSet

      public static Set<Class<?>> getAllInterfacesForClassAsSet(Class<?> clazz)
      Return all interfaces that the given class implements as a Set, including ones implemented by superclasses.

      If the class itself is an interface, it gets returned as sole interface.

      参数:
      clazz - the class to analyze for interfaces
      返回:
      all interfaces that the given object implements as a Set
      从以下版本开始:
      3.0
    • getAllInterfacesForClassAsSet

      public static Set<Class<?>> getAllInterfacesForClassAsSet(Class<?> clazz, @Nullable ClassLoader classLoader)
      Return all interfaces that the given class implements as a Set, including ones implemented by superclasses.

      If the class itself is an interface, it gets returned as sole interface.

      参数:
      clazz - the class to analyze for interfaces
      classLoader - the ClassLoader that the interfaces need to be visible in (may be null when accepting all declared interfaces)
      返回:
      all interfaces that the given object implements as a Set
      从以下版本开始:
      3.0
    • createCompositeInterface

      public static Class<?> createCompositeInterface(Class<?>[] interfaces, @Nullable ClassLoader classLoader)
      Create a composite interface Class for the given interfaces, implementing the given interfaces in one single Class.

      This implementation builds a JDK proxy class for the given interfaces.

      参数:
      interfaces - the interfaces to merge
      classLoader - the ClassLoader to create the composite Class in
      返回:
      the merged interface as Class
      抛出:
      IllegalArgumentException - if the specified interfaces expose conflicting method signatures (or a similar constraint is violated)
      从以下版本开始:
      4.0
      另请参阅:
    • determineCommonAncestor

      @Nullable public static Class<?> determineCommonAncestor(@Nullable Class<?> clazz1, @Nullable Class<?> clazz2)
      Determine the common ancestor of the given classes, if any.
      参数:
      clazz1 - the class to introspect
      clazz2 - the other class to introspect
      返回:
      the common ancestor (i.e. common superclass, one interface extending the other), or null if none found. If any of the given classes is null, the other class will be returned.
      从以下版本开始:
      4.0
    • isCacheSafe

      public static boolean isCacheSafe(Class<?> clazz, @Nullable ClassLoader classLoader)
      Check whether the given class is cache-safe in the given context, i.e. whether it is loaded by the given ClassLoader or a parent of it.
      参数:
      clazz - the class to analyze
      classLoader - the ClassLoader to potentially cache metadata in (may be null which indicates the system class loader)
      从以下版本开始:
      4.0
    • isVisible

      public static boolean isVisible(Class<?> clazz, @Nullable ClassLoader classLoader)
      Check whether the given class is visible in the given ClassLoader.
      参数:
      clazz - the class to check (typically an interface)
      classLoader - the ClassLoader to check against (may be null in which case this method will always return true)
      从以下版本开始:
      3.0
    • isLoadable

      private static boolean isLoadable(Class<?> clazz, ClassLoader classLoader)
      Check whether the given class is loadable in the given ClassLoader.
      参数:
      clazz - the class to check (typically an interface)
      classLoader - the ClassLoader to check against
      从以下版本开始:
      3.0
    • classNamesToString

      public static String classNamesToString(Class<?>... classes)
      Build a String that consists of the names of the classes/interfaces in the given array.

      Basically like AbstractCollection.toString(), but stripping the "class "/"interface " prefix before every class name.

      参数:
      classes - an array of Class objects
      返回:
      a String of form "[com.foo.Bar, com.foo.Baz]"
      从以下版本开始:
      3.0
      另请参阅:
    • classNamesToString

      public static String classNamesToString(Collection<Class<?>> classes)
      Build a String that consists of the names of the classes/interfaces in the given collection.

      Basically like AbstractCollection.toString(), but stripping the "class "/"interface " prefix before every class name.

      参数:
      classes - a Collection of Class objects (may be null)
      返回:
      a String of form "[com.foo.Bar, com.foo.Baz]"
      从以下版本开始:
      3.0
      另请参阅:
    • getPackageName

      public static String getPackageName(Class<?> clazz)
      Determine the name of the package of the given class, e.g. "java.lang" for the java.lang.String class.
      参数:
      clazz - the class
      返回:
      the package name, or the empty String if the class is defined in the default package
      从以下版本开始:
      3.0
    • getPackageName

      public static String getPackageName(String fqClassName)
      Determine the name of the package of the given fully-qualified class name, e.g. "java.lang" for the java.lang.String class name.
      参数:
      fqClassName - the fully-qualified class name
      返回:
      the package name, or the empty String if the class is defined in the default package
      从以下版本开始:
      3.0
    • adaptArgumentsIfNecessary

      public static Object[] adaptArgumentsIfNecessary(Method method, @Nullable Object[] arguments)
      Adapt the given arguments to the target signature in the given method, if necessary: in particular, if a given vararg argument array does not match the array type of the declared vararg parameter in the method.
      参数:
      method - the target method
      arguments - the given arguments
      返回:
      a cloned argument array, or the original if no adaptation is needed
    • getQualifiedName

      public static String getQualifiedName(Class<?> clazz)
      Return the qualified name of the given class: usually simply the class name, but component type class name + "[]" for arrays.
      参数:
      clazz - the class
      返回:
      the qualified name of the class
      从以下版本开始:
      3.0
    • getShortName

      public static String getShortName(String className)
      Get the class name without the qualified package name.
      参数:
      className - the className to get the short name for
      返回:
      the class name of the class without the package name
      抛出:
      IllegalArgumentException - if the className is empty
      从以下版本开始:
      3.0
    • getSimpleName

      public static String getSimpleName(String className)
    • matchesTypeName

      public static boolean matchesTypeName(Class<?> clazz, @Nullable String typeName)
      Check whether the given class matches the user-specified type name.
      参数:
      clazz - the class to check
      typeName - the type name to match
      从以下版本开始:
      4.0
    • getShortName

      public static String getShortName(Class<?> clazz)
      Get the class name without the qualified package name.
      参数:
      clazz - the class to get the short name for
      返回:
      the class name of the class without the package name
      从以下版本开始:
      3.0
    • getShortNameAsProperty

      public static String getShortNameAsProperty(Class<?> clazz)
      Return the short string name of a Java class in uncapitalized JavaBeans property format. Strips the outer class name in case of a nested class.
      参数:
      clazz - the class
      返回:
      the short name rendered in a standard JavaBeans property format
      从以下版本开始:
      4.0
      另请参阅:
    • getClassFileName

      public static String getClassFileName(Class<?> clazz)
      Determine the name of the class file, relative to the containing package: e.g. "String.class"
      参数:
      clazz - the class
      返回:
      the file name of the ".class" file
      从以下版本开始:
      4.0
    • getFullyClassFileName

      public static String getFullyClassFileName(Class<?> clazz)
      Determine the name of the class file, relative to the containing package: e.g. "java/lang/String.class"
      参数:
      clazz - the class
      返回:
      the file name of the ".class" file
      从以下版本开始:
      4.0
    • classPackageAsResourcePath

      public static String classPackageAsResourcePath(@Nullable Class<?> clazz)
      Given an input class object, return a string which consists of the class's package name as a pathname, i.e., all dots ('.') are replaced by slashes ('/'). Neither a leading nor trailing slash is added. The result could be concatenated with a slash and the name of a resource and fed directly to ClassLoader.getResource(). For it to be fed to Class.getResource instead, a leading slash would also have to be prepended to the returned value.
      参数:
      clazz - the input class. A null value or the default (empty) package will result in an empty string ("") being returned.
      返回:
      a path which represents the package name
      从以下版本开始:
      3.0
      另请参阅:
    • convertResourcePathToClassName

      public static String convertResourcePathToClassName(String resourcePath)
      Convert a "/"-based resource path to a "."-based fully qualified class name.
      参数:
      resourcePath - the resource path pointing to a class
      返回:
      the corresponding fully qualified class name
      从以下版本开始:
      4.0
    • convertClassNameToResourcePath

      public static String convertClassNameToResourcePath(String className)
      Convert a "."-based fully qualified class name to a "/"-based resource path.
      参数:
      className - the fully qualified class name
      返回:
      the corresponding resource path, pointing to the class
      从以下版本开始:
      4.0
    • addResourcePathToPackagePath

      public static String addResourcePathToPackagePath(Class<?> clazz, String resourceName)
      Return a path suitable for use with ClassLoader.getResource (also suitable for use with Class.getResource by prepending a slash ('/') to the return value). Built by taking the package of the specified class file, converting all dots ('.') to slashes ('/'), adding a trailing slash if necessary, and concatenating the specified resource name to this.
      As such, this function may be used to build a path suitable for loading a resource file that is in the same package as a class file, although ClassPathResource is usually even more convenient.
      参数:
      clazz - the Class whose package will be used as the base
      resourceName - the resource name to append. A leading slash is optional.
      返回:
      the built-up resource path
      从以下版本开始:
      4.0
      另请参阅:
    • getEnumType

      public static Class<?> getEnumType(Class<?> targetType)
      抛出:
      IllegalArgumentException - target is not a enum
      从以下版本开始:
      3.0
    • isPrimitiveWrapper

      public static boolean isPrimitiveWrapper(Class<?> clazz)
      Check if the given class represents a primitive wrapper, i.e. Boolean, Byte, Character, Short, Integer, Long, Float, Double, or Void.
      参数:
      clazz - the class to check
      返回:
      whether the given class is a primitive wrapper class
      从以下版本开始:
      4.0
    • isPrimitiveOrWrapper

      public static boolean isPrimitiveOrWrapper(Class<?> clazz)
      Check if the given class represents a primitive (i.e. boolean, byte, char, short, int, long, float, or double), void, or a wrapper for those types (i.e. Boolean, Byte, Character, Short, Integer, Long, Float, Double, or Void).
      参数:
      clazz - the class to check
      返回:
      true if the given class represents a primitive, void, or a wrapper class
      从以下版本开始:
      4.0
    • isPrimitiveArray

      public static boolean isPrimitiveArray(Class<?> clazz)
      Check if the given class represents an array of primitives, i.e. boolean, byte, char, short, int, long, float, or double.
      参数:
      clazz - the class to check
      返回:
      whether the given class is a primitive array class
      从以下版本开始:
      4.0
    • isPrimitiveWrapperArray

      public static boolean isPrimitiveWrapperArray(Class<?> clazz)
      Check if the given class represents an array of primitive wrappers, i.e. Boolean, Byte, Character, Short, Integer, Long, Float, or Double.
      参数:
      clazz - the class to check
      返回:
      whether the given class is a primitive wrapper array class
      从以下版本开始:
      4.0
    • resolvePrimitiveIfNecessary

      public static Class<?> resolvePrimitiveIfNecessary(Class<?> clazz)
      Resolve the given class if it is a primitive class, returning the corresponding primitive wrapper type instead.
      参数:
      clazz - the class to check
      返回:
      the original class, or a primitive wrapper for the original primitive type
      从以下版本开始:
      4.0
    • isSimpleValueType

      public static boolean isSimpleValueType(Class<?> type)
      Delegate for cn.taketoday.beans.BeanUtils#isSimpleValueType. Also used by ObjectUtils.nullSafeConciseToString(java.lang.Object).

      Check if the given type represents a common "simple" value type: a primitive or primitive wrapper, an Enum, a String or other CharSequence, a Number, a Date, a Temporal, a UUID, a URI, a URL, a Locale, or a Class.

      Void and void are not considered simple value types.

      参数:
      type - the type to check
      返回:
      whether the given type represents a "simple" value type, suggesting value-based data binding and toString output
      从以下版本开始:
      4.0
    • isAssignable

      public static boolean isAssignable(Class<?> lhsType, Class<?> rhsType)
      Check if the right-hand side type may be assigned to the left-hand side type, assuming setting by reflection. Considers primitive wrapper classes as assignable to the corresponding primitive types.
      参数:
      lhsType - the target type (left-hand side (LHS) type)
      rhsType - the value type (right-hand side (RHS) type) that should
      返回:
      if the target type is assignable from the value type
      从以下版本开始:
      4.0
      另请参阅:
    • isAssignableValue

      public static boolean isAssignableValue(Class<?> type, @Nullable Object value)
      Determine if the given type is assignable from the given value, assuming setting by reflection. Considers primitive wrapper classes as assignable to the corresponding primitive types.
      参数:
      type - the target type
      value - the value that should be assigned to the type
      返回:
      if the type is assignable from the value
      从以下版本开始:
      4.0
    • isUserLevelMethod

      public static boolean isUserLevelMethod(Method method)
      Determine whether the given method is declared by the user or at least pointing to a user-declared method.

      Checks Method.isSynthetic() (for implementation methods) as well as the GroovyObject interface (for interface methods; on an implementation class, implementations of the GroovyObject methods will be marked as synthetic anyway). Note that, despite being synthetic, bridge methods (Method.isBridge()) are considered as user-level methods since they are eventually pointing to a user-declared generic method.

      参数:
      method - the method to check
      返回:
      true if the method can be considered as user-declared; false otherwise
      从以下版本开始:
      4.0
    • isGroovyObjectMethod

      private static boolean isGroovyObjectMethod(Method method)