
com.star.reflect.ConstructorUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of utils Show documentation
Show all versions of utils Show documentation
some utility class for java develop
The newest version!
package com.star.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.Optional;
/**
* 构造器工具类
*
* @author starhq
*/
public final class ConstructorUtil {
/**
* 缓存
*/
private static final ClassValue[]> CACHE = new ClassValue[]>() {
/**
* 获得累的构造函数列表
* @param clazz 类
* @return 构造函数数组
*/
@Override
protected Constructor>[] computeValue(final Class> clazz) {
return clazz.getDeclaredConstructors();
}
};
private ConstructorUtil() {
}
/**
* 查询类的构造函数列表
*
* @param beanClass 类
* @param 泛型
* @return 构造函数
*/
@SuppressWarnings("unchecked")
public static Constructor[] getConstructors(final Class beanClass) {
return (Constructor[]) CACHE.get(beanClass);
}
/**
* 查询类的构造函数列表
*
* @param beanClass 类
* @param parameterTypes 构造函数的入参类型
* @param 泛型
* @return 构造函数
*/
@SuppressWarnings("unchecked")
public static Optional> getConstructor(final Class beanClass, final Class>... parameterTypes) {
final Constructor[] constructors = getConstructors(beanClass);
Class>[] pts;
Optional> result = Optional.empty();
for (final Constructor constructor : constructors) {
pts = constructor.getParameterTypes();
if (Arrays.deepEquals(pts, parameterTypes)) {
result = Optional.of(constructor);
break;
}
}
return result;
}
/**
* 强制转换constructor可访问.
*
* @param constructor 需要转换的构造函数
*/
public static void makeAccessible(final Constructor> constructor) {
if (!Modifier.isPublic(constructor.getModifiers()) || !Modifier.isPublic(constructor.getDeclaringClass().getModifiers())) {
constructor.setAccessible(true);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy