T
- public class Mirror<T> extends Object
限定符和类型 | 方法和说明 |
---|---|
static Object |
blankArrayArg(Class<?>[] pts)
根据函数参数类型数组的最后一个类型(一定是数组,表示变参),为最后一个变参生成一个空数组
|
T |
born(Object... args)
根据构造函数参数,创建一个对象。
|
boolean |
canCastToDirectly(Class<?> type) |
static Object |
evalArgToRealArray(Object... args)
将一个 Object[] 数组,变成一个真正的数组 T[]
|
static Object |
evalArgToSameTypeRealArray(Object... args) |
static void |
evalGetterSetter(Method method,
Callback3<String,Method,Method> callback,
Callback<Method> whenError)
根据给定的一个方法,判断其是 Getter 还是 Setter
对于回调会接受三个参数
callback(虚字段名, getter, setter)
回调都会给一个参数,表示这个方法对应的虚拟字段名。
|
static void |
evalGetterSetter(Method method,
String errmsgFormat,
Callback3<String,Method,Method> callback)
根据给定的一个方法,判断其是 Getter 还是 Setter,根据情况不同,调用不同的回调。
|
static Class<?>[] |
evalToTypes(Object... args)
将一组对象,变成一组类型
|
Class<?>[] |
extractTypes() |
static Field |
findField(Class<?> type,
Class<? extends Annotation> ann)
查找包含某一个特殊注解的字段
|
Method |
findMethod(Class<?> returnType,
Class<?>... paramTypes)
根据返回值类型,以及参数类型,查找第一个匹配的方法
|
Method |
findMethod(String name,
Class<?>... paramTypes)
查找一个方法。
|
Method |
findMethod(String name,
Object[] args)
根据一组参数样例,获取一个合理的调用方法
|
Method[] |
findMethods(String name,
int argNumber)
根据名称和参数个数,查找一组方法
|
Method[] |
findSetters(String fieldName)
根据一个字段名,获取一组有可能成为 Setter 函数
|
Type |
getActuallyType() |
Method[] |
getAllDeclaredMethods(Class<?> top)
获取当前对象,所有的方法,包括私有方法。
|
Method[] |
getAllDeclaredMethodsWithoutTop()
相当于 getAllDeclaredMethods(Object.class)
|
<A extends Annotation> |
getAnnotation(Class<A> annType)
向父类递归查找某一个运行时注解
|
static <T extends Annotation> |
getAnnotationDeep(Class<?> type,
Class<T> annotationClass) |
static <T extends Annotation> |
getAnnotationDeep(Method method,
Class<T> annotationClass) |
Borning<T> |
getBorning(Object... args)
获取对象构建器
|
Borning<T> |
getBorningByArgTypes(Class<?>... argTypes)
获取对象构建器
|
static String |
getConstructorDescriptor(Constructor<?> c) |
Ejecting |
getEjecting(Field field) |
Ejecting |
getEjecting(String fieldName)
根据字段名获得一个字段输入方式。
|
Ejecting |
getEjecting(String fieldName,
Class<?> returnType) |
<AT extends Annotation> |
getField(Class<AT> ann)
获取一个字段。
|
Field |
getField(String name)
获取一个字段。
|
Field[] |
getFields()
获得当前类以及所有父类的所有的属性,包括私有属性。
|
<AT extends Annotation> |
getFields(Class<AT> ann)
获取一组声明了特殊注解的字段
|
Type |
getGenericsType(int index)
取得当前类型的指定泛型
|
Type[] |
getGenericsTypes()
取得当前类型的泛型数组
|
static Class<?>[] |
getGenericTypes(Field f)
获取一个字段的泛型参数数组,如果这个字段没有泛型,返回空数组
|
static Class<?> |
getGenericTypes(Field f,
int index)
获取一个字段的某一个泛型参数,如果没有,返回 null
|
Method |
getGetter(Field field)
根据字段获取一个 Getter。
|
Method |
getGetter(String fieldName)
根据名称获取一个 Getter。
|
Method |
getGetter(String fieldName,
Class<?> returnType)
根据名称和返回值获取一个 Getter。
|
Injecting |
getInjecting(String fieldName)
根据字段名,得出一个字段注入方式。
|
Invoking |
getInvoking(String methodName,
Object... args)
根据函数名称和参数,返回一个函数调用方式
|
static String |
getMethodDescriptor(Method method) |
Method[] |
getMethods()
获取本类型所有的方法,包括私有方法。
|
Class<?> |
getOuterClass() |
static String |
getParamDescriptor(Class<?>[] parameterTypes) |
static String |
getPath(Class<?> klass) |
Method |
getSetter(Field field)
根据一个字段获取 Setter
比如,你想获取 abc 的 setter ,那么优先查找 setAbc(T abc),如果 没有,则查找 abc(T abc)。
|
Method |
getSetter(String fieldName,
Class<?> paramType)
根据一个字段名和字段类型获取 Setter
|
Field[] |
getStaticField(boolean noFinal)
获得所有的静态变量属性
|
Method[] |
getStaticMethods() |
Class<T> |
getType() |
static String |
getTypeDescriptor(Class<?> klass) |
String |
getTypeId() |
static <T> Class<T> |
getTypeParam(Class<?> klass,
int index)
获取一个类的某个一个泛型参数
|
static Type[] |
getTypeParams(Class<?> klass)
获取一个类的泛型参数数组,如果这个类没有泛型参数,返回 null
|
Object |
getValue(Object obj,
Field f)
不调用 getter,直接获得字段的值
|
Object |
getValue(Object obj,
String name)
优先通过 getter 获取字段值,如果没有,则直接获取字段值
|
Class<?> |
getWrapper() |
Class<?> |
getWrapperClass() |
boolean |
hasInterface(Class<?> clzInterface) |
Object |
invoke(Object obj,
String methodName,
Object... args)
调用对象的一个方法
|
boolean |
is(Class<?> type)
判断当前对象是否为一个类型。
|
boolean |
is(String className)
判断当前对象是否为一个类型。
|
boolean |
isArray()
判断当前类型是否为数组
|
boolean |
isBoolean() |
boolean |
isByte() |
boolean |
isChar() |
boolean |
isColl() |
boolean |
isCollection()
判断当前类型是否为 Collection
|
boolean |
isContainer()
判断当前类型是否为容器,包括 Map,Collection, 以及数组
|
boolean |
isDateTimeLike() |
boolean |
isDecimal() |
boolean |
isDouble() |
boolean |
isEnum() |
boolean |
isFloat() |
boolean |
isInt() |
boolean |
isInterface() |
boolean |
isIntLike() |
boolean |
isLong() |
boolean |
isMap()
判断当前类型是否为 Map
|
boolean |
isNumber() |
boolean |
isObj()
如果不是容器,也不是 POJO,那么它必然是个 Obj
|
boolean |
isOf(Class<?> type) |
boolean |
isPojo()
判断当前类型是否为POJO。
|
boolean |
isPrimitiveNumber() |
boolean |
isShort() |
boolean |
isSimple() |
boolean |
isString() |
boolean |
isStringLike() |
boolean |
isWrapperOf(Class<?> type) |
static MatchType |
matchParamTypes(Class<?>[] paramTypes,
Class<?>[] argTypes)
匹配一个函数声明的参数类型数组和一个调用参数数组
|
static MatchType |
matchParamTypes(Class<?>[] methodParamTypes,
Object... args)
一个方法的参数类型同一个给定的参数数组是否可以匹配
|
static <T> Mirror<T> |
me(Class<T> classOfT)
包裹一个类
|
static <T> Mirror<T> |
me(Class<T> classOfT,
TypeExtractor typeExtractor)
包裹一个类,并设置自定义的类型提炼逻辑
|
static <T> Mirror<T> |
me(T obj)
生成一个对象的 Mirror
|
static <T> Mirror<T> |
me(Type type)
根据Type生成Mirror, 如果type是
ParameterizedType 类型的对象可以使用 getGenericsTypes() 方法取得它的泛型数组 |
Mirror<T> |
setTypeExtractor(TypeExtractor typeExtractor)
设置自己的类型提炼逻辑
|
void |
setValue(Object obj,
Field field,
Object value)
为对象的一个字段设值。
|
void |
setValue(Object obj,
String fieldName,
Object value)
为对象的一个字段设值。
|
String |
toString() |
Class<?> |
unWrapper() |
public static <T> Mirror<T> me(T obj)
obj
- 对象。public static <T> Mirror<T> me(Class<T> classOfT, TypeExtractor typeExtractor)
classOfT
- typeExtractor
- TypeExtractor
public static <T> Mirror<T> me(Type type)
ParameterizedType
类型的对象public Mirror<T> setTypeExtractor(TypeExtractor typeExtractor)
typeExtractor
- TypeExtractor
public Method getGetter(String fieldName) throws NoSuchMethodException
比如,你想获取 abc 的 getter ,那么优先查找 getAbc(),如果没有则查找isAbc(),最后才是查找 abc()。
fieldName
- NoSuchMethodException
- 没有找到 Getterpublic Method getGetter(String fieldName, Class<?> returnType) throws NoSuchMethodException
比如,你想获取 abc 的 getter ,那么优先查找 getAbc(),如果没有则查找isAbc(),最后才是查找 abc()。
fieldName
- 字段名returnType
- 返回值NoSuchMethodException
- 没有找到 Getterpublic Method getGetter(Field field) throws NoSuchMethodException
比如,你想获取 abc 的 getter ,那么优先查找 getAbc(),如果 没有,则查找 abc()。
field
- NoSuchMethodException
- 没有找到 Getterpublic static void evalGetterSetter(Method method, Callback3<String,Method,Method> callback, Callback<Method> whenError)
对于回调会接受三个参数
callback(虚字段名, getter, setter)回调都会给一个参数,表示这个方法对应的虚拟字段名。所谓"虚拟字段",就比如
method
- 方法对象callback
- 回调, 如果为 null,则无视whenError
- 如果本方法即不是 Getter 也不是 Setter 的回调, 如果为 null,则无视public static void evalGetterSetter(Method method, String errmsgFormat, Callback3<String,Method,Method> callback)
method
- 方法对象errmsgFormat
- 如果本方法即不是 Getter 也不是 Setter 的回调, 则根据这个消息模板抛出一个运行时异常。 这个字符串格式是个
Java 的字符串模板,接受两个参数,第一个是方法名,第二个是所在类名callback
- 回调, 如果为 null,则无视public Method getSetter(Field field) throws NoSuchMethodException
比如,你想获取 abc 的 setter ,那么优先查找 setAbc(T abc),如果 没有,则查找 abc(T abc)。
field
- 字段NoSuchMethodException
- 没找到 Setterpublic Method getSetter(String fieldName, Class<?> paramType) throws NoSuchMethodException
fieldName
- 字段名paramType
- 字段类型NoSuchMethodException
- 没找到 Setterpublic Method[] findSetters(String fieldName)
fieldName
- public Field getField(String name) throws NoSuchFieldException
name
- 字段名NoSuchFieldException
public <AT extends Annotation> Field getField(Class<AT> ann) throws NoSuchFieldException
ann
- 注解NoSuchFieldException
public <AT extends Annotation> Field[] getFields(Class<AT> ann)
ann
- 注解类型public Field[] getFields()
public Field[] getStaticField(boolean noFinal)
noFinal
- 是否包括 final 修饰符的字段public <A extends Annotation> A getAnnotation(Class<A> annType)
A
- 注解类型参数annType
- 注解类型public Type[] getGenericsTypes()
public Type getGenericsType(int index)
public Method[] getMethods()
public Method[] getAllDeclaredMethods(Class<?> top)
并且这个按照名称,消除重复的方法。子类方法优先
top
- 截至的父类public Method[] getAllDeclaredMethodsWithoutTop()
public Method[] getStaticMethods()
public void setValue(Object obj, Field field, Object value) throws FailToSetValueException
obj
- 对象field
- 字段value
- 值。如果为 null,字符和数字字段,都会设成 0FailToSetValueException
public void setValue(Object obj, String fieldName, Object value) throws FailToSetValueException
obj
- 对象fieldName
- 字段名value
- 值FailToSetValueException
public Object getValue(Object obj, Field f) throws FailToGetValueException
obj
- 对象f
- 字段FailToGetValueException
public Object getValue(Object obj, String name) throws FailToGetValueException
obj
- 对象name
- 字段名FailToGetValueException
- 既没发现 getter,又没有字段public String getTypeId()
public Type getActuallyType()
public Class<?>[] extractTypes()
public Class<?> getWrapperClass()
RuntimeException
- 如果当前类型不是原生类型,则抛出public Class<?> getWrapper()
public Class<?> getOuterClass()
public Borning<T> getBorning(Object... args) throws BorningException
args
- 构造函数参数BorningException
- 当没有发现合适的 Borning 时抛出Borning
public Borning<T> getBorningByArgTypes(Class<?>... argTypes) throws BorningException
argTypes
- 构造函数参数类型数组BorningException
- 当没有发现合适的 Borning 时抛出NullPointerException
- when args is nullpublic Invoking getInvoking(String methodName, Object... args)
methodName
- 函数名args
- 参数public Injecting getInjecting(String fieldName)
fieldName
- 字段名public Ejecting getEjecting(String fieldName)
fieldName
- 字段名public Object invoke(Object obj, String methodName, Object... args)
obj
- 对象methodName
- 方法名args
- 参数public Method findMethod(String name, Object[] args) throws NoSuchMethodException
name
- 方法名args
- 参数样例NoSuchMethodException
public Method findMethod(String name, Class<?>... paramTypes) throws NoSuchMethodException
name
- 方法名paramTypes
- 参数类型列表NoSuchMethodException
- 找不到合适方法时抛出public Method[] findMethods(String name, int argNumber)
name
- 方法名argNumber
- 参数个数public Method findMethod(Class<?> returnType, Class<?>... paramTypes) throws NoSuchMethodException
returnType
- 返回值类型paramTypes
- 参数个数NoSuchMethodException
- 找不到合适的方法时抛出public static MatchType matchParamTypes(Class<?>[] methodParamTypes, Object... args)
methodParamTypes
- 参数类型列表args
- 参数MatchType
public static Class<?>[] evalToTypes(Object... args)
args
- 对象数组public static Object evalArgToRealArray(Object... args)
args
- 数组public static MatchType matchParamTypes(Class<?>[] paramTypes, Class<?>[] argTypes)
paramTypes
- 函数声明参数数组argTypes
- 调用参数数组MatchType
public boolean is(Class<?> type)
type
- 类型public boolean is(String className)
className
- 类型名称public boolean isOf(Class<?> type)
type
- 类型或接口名public boolean isString()
public boolean isStringLike()
public boolean isSimple()
public boolean isChar()
public boolean isEnum()
public boolean isBoolean()
public boolean isFloat()
public boolean isDouble()
public boolean isInt()
public boolean isIntLike()
public boolean isInterface()
public boolean isDecimal()
public boolean isLong()
public boolean isShort()
public boolean isByte()
public boolean isWrapperOf(Class<?> type)
type
- 类型public boolean canCastToDirectly(Class<?> type)
type
- 目标类型public boolean isPrimitiveNumber()
public boolean isObj()
public boolean isPojo()
public boolean isContainer()
public boolean isArray()
public boolean isCollection()
public boolean isColl()
public boolean isMap()
public boolean isNumber()
public boolean isDateTimeLike()
public static Object blankArrayArg(Class<?>[] pts)
pts
- 函数参数类型列表public static Class<?>[] getGenericTypes(Field f)
f
- 字段public static Class<?> getGenericTypes(Field f, int index)
f
- 字段public static <T> Class<T> getTypeParam(Class<?> klass, int index)
klass
- 类index
- 参数下标 (从 0 开始)public static String getParamDescriptor(Class<?>[] parameterTypes)
parameterTypes
- 函数的参数类型数组public static String getMethodDescriptor(Method method)
method
- 方法public static String getConstructorDescriptor(Constructor<?> c)
c
- 构造函数public static String getTypeDescriptor(Class<?> klass)
klass
- 类型public static Field findField(Class<?> type, Class<? extends Annotation> ann)
type
- 类型ann
- 注解类型public Class<?> unWrapper()
public boolean hasInterface(Class<?> clzInterface)
clzInterface
- 接口clzpublic static <T extends Annotation> T getAnnotationDeep(Method method, Class<T> annotationClass)
public static <T extends Annotation> T getAnnotationDeep(Class<?> type, Class<T> annotationClass)
Copyright © 2017. All rights reserved.