Package org.apache.commons.lang3.reflect
Class MemberUtils
- java.lang.Object
-
- org.apache.commons.lang3.reflect.MemberUtils
-
abstract class MemberUtils extends java.lang.Object
Contains common code for working withMethods
/Constructors
, extracted and refactored fromMethodUtils
when it was imported from Commons BeanUtils.- Since:
- 2.5
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
MemberUtils.Executable
A class providing a subset of the API of java.lang.reflect.Executable in Java 1.8, providing a common representation for function signatures for Constructors and Methods.
-
Field Summary
Fields Modifier and Type Field Description private static int
ACCESS_TEST
private static java.lang.Class<?>[]
ORDERED_PRIMITIVE_TYPES
Array of primitive number types ordered by "promotability"
-
Constructor Summary
Constructors Constructor Description MemberUtils()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description (package private) static int
compareConstructorFit(java.lang.reflect.Constructor<?> left, java.lang.reflect.Constructor<?> right, java.lang.Class<?>[] actual)
Compares the relative fitness of two Constructors in terms of how well they match a set of runtime parameter types, such that a list ordered by the results of the comparison would return the best match first (least).(package private) static int
compareMethodFit(java.lang.reflect.Method left, java.lang.reflect.Method right, java.lang.Class<?>[] actual)
Compares the relative fitness of two Methods in terms of how well they match a set of runtime parameter types, such that a list ordered by the results of the comparison would return the best match first (least).private static int
compareParameterTypes(MemberUtils.Executable left, MemberUtils.Executable right, java.lang.Class<?>[] actual)
Compares the relative fitness of two Executables in terms of how well they match a set of runtime parameter types, such that a list ordered by the results of the comparison would return the best match first (least).private static float
getObjectTransformationCost(java.lang.Class<?> srcClass, java.lang.Class<?> destClass)
Gets the number of steps required needed to turn the source class into the destination class.private static float
getPrimitivePromotionCost(java.lang.Class<?> srcClass, java.lang.Class<?> destClass)
Gets the number of steps required to promote a primitive number to another type.private static float
getTotalTransformationCost(java.lang.Class<?>[] srcArgs, MemberUtils.Executable executable)
Returns the sum of the object transformation cost for each class in the source argument list.(package private) static boolean
isAccessible(java.lang.reflect.Member m)
Returns whether aMember
is accessible.(package private) static boolean
isMatchingConstructor(java.lang.reflect.Constructor<?> method, java.lang.Class<?>[] parameterTypes)
private static boolean
isMatchingExecutable(MemberUtils.Executable method, java.lang.Class<?>[] parameterTypes)
(package private) static boolean
isMatchingMethod(java.lang.reflect.Method method, java.lang.Class<?>[] parameterTypes)
(package private) static boolean
isPackageAccess(int modifiers)
Returns whether a given set of modifiers implies package access.(package private) static boolean
setAccessibleWorkaround(java.lang.reflect.AccessibleObject o)
XXX Default access superclass workaround.
-
-
-
Field Detail
-
ACCESS_TEST
private static final int ACCESS_TEST
- See Also:
- Constant Field Values
-
ORDERED_PRIMITIVE_TYPES
private static final java.lang.Class<?>[] ORDERED_PRIMITIVE_TYPES
Array of primitive number types ordered by "promotability"
-
-
Method Detail
-
setAccessibleWorkaround
static boolean setAccessibleWorkaround(java.lang.reflect.AccessibleObject o)
XXX Default access superclass workaround. When apublic
class has a default access superclass withpublic
members, these members are accessible. Calling them from compiled code works fine. Unfortunately, on some JVMs, using reflection to invoke these members seems to (wrongly) prevent access even when the modifier ispublic
. CallingsetAccessible(true)
solves the problem but will only work from sufficiently privileged code. Better workarounds would be gratefully accepted.- Parameters:
o
- the AccessibleObject to set as accessible- Returns:
- a boolean indicating whether the accessibility of the object was set to true.
-
isPackageAccess
static boolean isPackageAccess(int modifiers)
Returns whether a given set of modifiers implies package access.- Parameters:
modifiers
- to test- Returns:
true
unlesspackage
/protected
/private
modifier detected
-
isAccessible
static boolean isAccessible(java.lang.reflect.Member m)
Returns whether aMember
is accessible.- Parameters:
m
- Member to check- Returns:
true
ifm
is accessible
-
compareConstructorFit
static int compareConstructorFit(java.lang.reflect.Constructor<?> left, java.lang.reflect.Constructor<?> right, java.lang.Class<?>[] actual)
Compares the relative fitness of two Constructors in terms of how well they match a set of runtime parameter types, such that a list ordered by the results of the comparison would return the best match first (least).- Parameters:
left
- the "left" Constructorright
- the "right" Constructoractual
- the runtime parameter types to match againstleft
/right
- Returns:
- int consistent with
compare
semantics - Since:
- 3.5
-
compareMethodFit
static int compareMethodFit(java.lang.reflect.Method left, java.lang.reflect.Method right, java.lang.Class<?>[] actual)
Compares the relative fitness of two Methods in terms of how well they match a set of runtime parameter types, such that a list ordered by the results of the comparison would return the best match first (least).- Parameters:
left
- the "left" Methodright
- the "right" Methodactual
- the runtime parameter types to match againstleft
/right
- Returns:
- int consistent with
compare
semantics - Since:
- 3.5
-
compareParameterTypes
private static int compareParameterTypes(MemberUtils.Executable left, MemberUtils.Executable right, java.lang.Class<?>[] actual)
Compares the relative fitness of two Executables in terms of how well they match a set of runtime parameter types, such that a list ordered by the results of the comparison would return the best match first (least).- Parameters:
left
- the "left" Executableright
- the "right" Executableactual
- the runtime parameter types to match againstleft
/right
- Returns:
- int consistent with
compare
semantics
-
getTotalTransformationCost
private static float getTotalTransformationCost(java.lang.Class<?>[] srcArgs, MemberUtils.Executable executable)
Returns the sum of the object transformation cost for each class in the source argument list.- Parameters:
srcArgs
- The source argumentsexecutable
- The executable to calculate transformation costs for- Returns:
- The total transformation cost
-
getObjectTransformationCost
private static float getObjectTransformationCost(java.lang.Class<?> srcClass, java.lang.Class<?> destClass)
Gets the number of steps required needed to turn the source class into the destination class. This represents the number of steps in the object hierarchy graph.- Parameters:
srcClass
- The source classdestClass
- The destination class- Returns:
- The cost of transforming an object
-
getPrimitivePromotionCost
private static float getPrimitivePromotionCost(java.lang.Class<?> srcClass, java.lang.Class<?> destClass)
Gets the number of steps required to promote a primitive number to another type.- Parameters:
srcClass
- the (primitive) source classdestClass
- the (primitive) destination class- Returns:
- The cost of promoting the primitive
-
isMatchingMethod
static boolean isMatchingMethod(java.lang.reflect.Method method, java.lang.Class<?>[] parameterTypes)
-
isMatchingConstructor
static boolean isMatchingConstructor(java.lang.reflect.Constructor<?> method, java.lang.Class<?>[] parameterTypes)
-
isMatchingExecutable
private static boolean isMatchingExecutable(MemberUtils.Executable method, java.lang.Class<?>[] parameterTypes)
-
-