This commit is contained in:
Looly 2023-04-06 01:46:28 +08:00
parent 43bada713d
commit 19f6ea76ca
84 changed files with 378 additions and 280 deletions

View File

@ -15,9 +15,9 @@ package org.dromara.hutool.core.annotation;
import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.classloader.ClassLoaderUtil;
import org.dromara.hutool.core.exceptions.UtilException;
import org.dromara.hutool.core.lang.func.LambdaInfo;
import org.dromara.hutool.core.lang.func.LambdaUtil;
import org.dromara.hutool.core.lang.func.SerFunction;
import org.dromara.hutool.core.func.LambdaInfo;
import org.dromara.hutool.core.func.LambdaUtil;
import org.dromara.hutool.core.func.SerFunction;
import org.dromara.hutool.core.map.WeakConcurrentMap;
import org.dromara.hutool.core.reflect.FieldUtil;
import org.dromara.hutool.core.reflect.MethodUtil;

View File

@ -2,7 +2,7 @@ package org.dromara.hutool.core.array;
import org.dromara.hutool.core.convert.Convert;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.func.Wrapper;
import org.dromara.hutool.core.func.Wrapper;
import org.dromara.hutool.core.util.ObjUtil;
import java.lang.reflect.Array;

View File

@ -12,7 +12,7 @@
package org.dromara.hutool.core.bean;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.SerSupplier;
import org.dromara.hutool.core.map.WeakConcurrentMap;
/**

View File

@ -12,7 +12,7 @@
package org.dromara.hutool.core.bean;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.SerSupplier;
import org.dromara.hutool.core.map.ReferenceConcurrentMap;
import org.dromara.hutool.core.map.WeakConcurrentMap;

View File

@ -15,7 +15,7 @@ package org.dromara.hutool.core.bean;
import org.dromara.hutool.core.annotation.AnnotationUtil;
import org.dromara.hutool.core.annotation.PropIgnore;
import org.dromara.hutool.core.convert.Convert;
import org.dromara.hutool.core.lang.func.LambdaUtil;
import org.dromara.hutool.core.func.LambdaUtil;
import org.dromara.hutool.core.reflect.FieldUtil;
import org.dromara.hutool.core.reflect.ModifierUtil;
import org.dromara.hutool.core.reflect.ReflectUtil;

View File

@ -14,8 +14,8 @@ package org.dromara.hutool.core.bean.copier;
import org.dromara.hutool.core.convert.Convert;
import org.dromara.hutool.core.convert.Converter;
import org.dromara.hutool.core.lang.func.LambdaUtil;
import org.dromara.hutool.core.lang.func.SerFunction;
import org.dromara.hutool.core.func.LambdaUtil;
import org.dromara.hutool.core.func.SerFunction;
import org.dromara.hutool.core.lang.mutable.MutableEntry;
import org.dromara.hutool.core.array.ArrayUtil;

View File

@ -13,7 +13,7 @@
package org.dromara.hutool.core.cache;
import org.dromara.hutool.core.cache.impl.CacheObj;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.SerSupplier;
import java.io.Serializable;
import java.util.Iterator;

View File

@ -13,7 +13,7 @@
package org.dromara.hutool.core.cache;
import org.dromara.hutool.core.collection.iter.TransIter;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.SerSupplier;
import org.dromara.hutool.core.lang.mutable.Mutable;
import org.dromara.hutool.core.lang.mutable.MutableObj;
import org.dromara.hutool.core.map.SafeConcurrentHashMap;

View File

@ -14,7 +14,7 @@ package org.dromara.hutool.core.cache.impl;
import org.dromara.hutool.core.cache.Cache;
import org.dromara.hutool.core.cache.CacheListener;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.SerSupplier;
import org.dromara.hutool.core.lang.mutable.Mutable;
import org.dromara.hutool.core.lang.mutable.MutableObj;
import org.dromara.hutool.core.map.SafeConcurrentHashMap;

View File

@ -13,7 +13,7 @@
package org.dromara.hutool.core.cache.impl;
import org.dromara.hutool.core.cache.Cache;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.SerSupplier;
import java.util.Iterator;

View File

@ -26,8 +26,8 @@ import org.dromara.hutool.core.convert.CompositeConverter;
import org.dromara.hutool.core.convert.Convert;
import org.dromara.hutool.core.exceptions.UtilException;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.func.SerBiConsumer;
import org.dromara.hutool.core.lang.func.SerConsumer3;
import org.dromara.hutool.core.func.SerBiConsumer;
import org.dromara.hutool.core.func.SerConsumer3;
import org.dromara.hutool.core.map.MapUtil;
import org.dromara.hutool.core.reflect.ConstructorUtil;
import org.dromara.hutool.core.reflect.FieldUtil;

View File

@ -24,7 +24,6 @@ import org.dromara.hutool.core.regex.PatternPool;
import org.dromara.hutool.core.regex.ReUtil;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.text.split.SplitUtil;
import org.dromara.hutool.core.date.format.parser.*;
import javax.xml.datatype.XMLGregorianCalendar;
import java.text.DateFormat;

View File

@ -13,7 +13,7 @@
package org.dromara.hutool.core.date;
import org.dromara.hutool.core.date.format.GlobalCustomFormat;
import org.dromara.hutool.core.lang.func.LambdaUtil;
import org.dromara.hutool.core.func.LambdaUtil;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.ObjUtil;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.lang.Assert;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.reflect.ConstructorUtil;
import org.dromara.hutool.core.util.JdkUtil;

View File

@ -10,13 +10,12 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.exceptions.UtilException;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.mutable.MutableEntry;
import org.dromara.hutool.core.map.WeakConcurrentMap;
import org.dromara.hutool.core.reflect.MethodHandleUtil;
import org.dromara.hutool.core.reflect.MethodUtil;
import org.dromara.hutool.core.reflect.ModifierUtil;
import org.dromara.hutool.core.reflect.ReflectUtil;
@ -94,7 +93,7 @@ public class LambdaFactory {
Assert.equals(abstractMethods.size(), 1, "不支持非函数式接口");
ReflectUtil.setAccessible(executable);
final MethodHandle methodHandle = MethodHandleUtil.unreflect(executable);
final MethodHandle methodHandle = LookupUtil.unreflect(executable);
final MethodType instantiatedMethodType;
if (executable instanceof Method) {
final Method method = (Method) executable;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.bean.BeanUtil;
import org.dromara.hutool.core.classloader.ClassLoaderUtil;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.bean.BeanUtil;
import org.dromara.hutool.core.classloader.ClassLoaderUtil;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.stream.StreamUtil;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.exceptions.UtilException;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.exceptions.UtilException;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.exceptions.UtilException;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.exceptions.UtilException;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.exceptions.UtilException;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.exceptions.UtilException;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.exceptions.UtilException;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.exceptions.UtilException;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.exceptions.UtilException;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.exceptions.UtilException;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
import org.dromara.hutool.core.exceptions.UtilException;

View File

@ -10,7 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;
/**
* 包装接口

View File

@ -19,4 +19,4 @@
* @author looly
*
*/
package org.dromara.hutool.core.lang.func;
package org.dromara.hutool.core.func;

View File

@ -22,7 +22,7 @@ import org.dromara.hutool.core.io.stream.FastByteArrayOutputStream;
import org.dromara.hutool.core.io.stream.StreamReader;
import org.dromara.hutool.core.io.stream.StreamWriter;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.func.SerConsumer;
import org.dromara.hutool.core.func.SerConsumer;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.ByteUtil;
import org.dromara.hutool.core.util.CharsetUtil;

View File

@ -13,7 +13,7 @@
package org.dromara.hutool.core.io;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.func.Wrapper;
import org.dromara.hutool.core.func.Wrapper;
import java.io.IOException;
import java.io.Reader;

View File

@ -15,8 +15,8 @@ package org.dromara.hutool.core.io.file;
import org.dromara.hutool.core.exceptions.UtilException;
import org.dromara.hutool.core.io.IORuntimeException;
import org.dromara.hutool.core.io.IoUtil;
import org.dromara.hutool.core.lang.func.SerConsumer;
import org.dromara.hutool.core.lang.func.SerFunction;
import org.dromara.hutool.core.func.SerConsumer;
import org.dromara.hutool.core.func.SerFunction;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.CharsetUtil;

View File

@ -21,8 +21,8 @@ import org.dromara.hutool.core.io.resource.ResourceUtil;
import org.dromara.hutool.core.io.stream.BOMInputStream;
import org.dromara.hutool.core.io.unit.DataSizeUtil;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.func.SerConsumer;
import org.dromara.hutool.core.lang.func.SerFunction;
import org.dromara.hutool.core.func.SerConsumer;
import org.dromara.hutool.core.func.SerFunction;
import org.dromara.hutool.core.net.url.URLUtil;
import org.dromara.hutool.core.reflect.ClassUtil;
import org.dromara.hutool.core.regex.ReUtil;

View File

@ -12,7 +12,7 @@
package org.dromara.hutool.core.io.file;
import org.dromara.hutool.core.lang.func.Wrapper;
import org.dromara.hutool.core.func.Wrapper;
import org.dromara.hutool.core.util.CharsetUtil;
import java.io.File;

View File

@ -14,7 +14,7 @@ package org.dromara.hutool.core.io.file;
import org.dromara.hutool.core.io.IORuntimeException;
import org.dromara.hutool.core.io.watch.SimpleWatcher;
import org.dromara.hutool.core.lang.func.SerConsumer;
import org.dromara.hutool.core.func.SerConsumer;
import java.io.IOException;
import java.io.RandomAccessFile;

View File

@ -17,7 +17,7 @@ import org.dromara.hutool.core.exceptions.UtilException;
import org.dromara.hutool.core.io.IORuntimeException;
import org.dromara.hutool.core.io.IoUtil;
import org.dromara.hutool.core.lang.Console;
import org.dromara.hutool.core.lang.func.SerConsumer;
import org.dromara.hutool.core.func.SerConsumer;
import org.dromara.hutool.core.util.CharUtil;
import org.dromara.hutool.core.util.CharsetUtil;

View File

@ -13,7 +13,7 @@
package org.dromara.hutool.core.io.watch;
import org.dromara.hutool.core.io.IoUtil;
import org.dromara.hutool.core.lang.func.SerBiConsumer;
import org.dromara.hutool.core.func.SerBiConsumer;
import org.dromara.hutool.core.array.ArrayUtil;
import java.io.Closeable;

View File

@ -12,7 +12,7 @@
package org.dromara.hutool.core.lang;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.SerSupplier;
import org.dromara.hutool.core.text.StrUtil;
import java.util.Collection;

View File

@ -13,7 +13,7 @@
package org.dromara.hutool.core.lang;
import org.dromara.hutool.core.classloader.ClassLoaderUtil;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.SerSupplier;
import org.dromara.hutool.core.map.SafeConcurrentHashMap;
import org.dromara.hutool.core.reflect.ConstructorUtil;
import org.dromara.hutool.core.text.StrUtil;

View File

@ -12,7 +12,7 @@
package org.dromara.hutool.core.lang.builder;
import org.dromara.hutool.core.lang.func.SerConsumer3;
import org.dromara.hutool.core.func.SerConsumer3;
import java.util.ArrayList;
import java.util.List;

View File

@ -38,7 +38,7 @@ class FiniteBound<T extends Comparable<? super T>> implements Bound<T> {
* 构造
*
* @param value 边界值
* @param type 边界类型
* @param type 边界类型
*/
FiniteBound(final T value, final BoundType type) {
this.value = value;
@ -142,7 +142,8 @@ class FiniteBound<T extends Comparable<? super T>> implements Bound<T> {
@Override
public BoundedRange<T> toRange() {
return getType().isLowerBound() ?
new BoundedRange<>(this, Bound.noneUpperBound()) : new BoundedRange<>(Bound.noneLowerBound(), this);
new BoundedRange<>(this, Bound.noneUpperBound())
: new BoundedRange<>(Bound.noneLowerBound(), this);
}
/**
@ -159,7 +160,7 @@ class FiniteBound<T extends Comparable<? super T>> implements Bound<T> {
if (o == null || getClass() != o.getClass()) {
return false;
}
final FiniteBound<?> that = (FiniteBound<?>)o;
final FiniteBound<?> that = (FiniteBound<?>) o;
return value.equals(that.value) && type == that.type;
}
@ -181,7 +182,7 @@ class FiniteBound<T extends Comparable<? super T>> implements Bound<T> {
@Override
public String toString() {
return CharSequenceUtil.format(
"{x | x {} {}}", type.getOperator(), value
"{x | x {} {}}", type.getOperator(), value
);
}

View File

@ -19,10 +19,10 @@ import org.dromara.hutool.core.collection.set.SetUtil;
import org.dromara.hutool.core.convert.Convert;
import org.dromara.hutool.core.exceptions.CloneRuntimeException;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.func.LambdaInfo;
import org.dromara.hutool.core.lang.func.LambdaUtil;
import org.dromara.hutool.core.lang.func.SerFunction;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.LambdaInfo;
import org.dromara.hutool.core.func.LambdaUtil;
import org.dromara.hutool.core.func.SerFunction;
import org.dromara.hutool.core.func.SerSupplier;
import org.dromara.hutool.core.lang.getter.TypeGetter;
import java.lang.reflect.Type;

View File

@ -15,7 +15,7 @@ package org.dromara.hutool.core.map;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.func.Wrapper;
import org.dromara.hutool.core.func.Wrapper;
import org.dromara.hutool.core.reflect.ClassUtil;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.ObjUtil;

View File

@ -13,7 +13,7 @@
package org.dromara.hutool.core.map;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.func.Wrapper;
import org.dromara.hutool.core.func.Wrapper;
import org.dromara.hutool.core.util.ObjUtil;
import java.io.IOException;

View File

@ -12,7 +12,7 @@
package org.dromara.hutool.core.map.multi;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.SerSupplier;
import java.util.ArrayList;
import java.util.Collection;

View File

@ -14,7 +14,7 @@ package org.dromara.hutool.core.map.multi;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.lang.Opt;
import org.dromara.hutool.core.lang.func.SerConsumer3;
import org.dromara.hutool.core.func.SerConsumer3;
import org.dromara.hutool.core.map.MapUtil;
import java.util.ArrayList;

View File

@ -15,13 +15,9 @@ package org.dromara.hutool.core.reflect;
import org.dromara.hutool.core.exceptions.UtilException;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.reflect.lookup.LookupUtil;
import org.dromara.hutool.core.text.StrUtil;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.Constructor;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
/**
@ -43,103 +39,6 @@ import java.lang.reflect.Method;
*/
public class MethodHandleUtil {
/**
* {@link Method}或者{@link Constructor} 包装为方法句柄{@link MethodHandle}
*
* @param methodOrConstructor {@link Method}或者{@link Constructor}
* @return 方法句柄{@link MethodHandle}
*/
public static MethodHandle unreflect(final Member methodOrConstructor) {
try {
if (methodOrConstructor instanceof Method) {
return LookupUtil.lookup().unreflect((Method) methodOrConstructor);
} else {
return LookupUtil.lookup().unreflectConstructor((Constructor<?>) methodOrConstructor);
}
} catch (final IllegalAccessException e) {
throw new UtilException(e);
}
}
/**
* 查找指定方法的方法句柄<br>
* 此方法只会查找
* <ul>
* <li>当前类的方法包括构造方法和private方法</li>
* <li>父类的方法包括构造方法和private方法</li>
* <li>当前类的static方法</li>
* </ul>
*
* @param callerClass 方法所在类或接口
* @param name 方法名称{@code null}或者空则查找构造方法
* @param type 返回类型和参数类型可以使用{@code MethodType#methodType}构建
* @return 方法句柄 {@link MethodHandle}{@code null}表示未找到方法
*/
public static MethodHandle findMethod(final Class<?> callerClass, final String name, final MethodType type) {
if (StrUtil.isBlank(name)) {
return findConstructor(callerClass, type);
}
MethodHandle handle = null;
final MethodHandles.Lookup lookup = LookupUtil.lookup(callerClass);
try {
handle = lookup.findVirtual(callerClass, name, type);
} catch (final IllegalAccessException | NoSuchMethodException ignore) {
//ignore
}
// static方法
if (null == handle) {
try {
handle = lookup.findStatic(callerClass, name, type);
} catch (final IllegalAccessException | NoSuchMethodException ignore) {
//ignore
}
}
// 特殊方法包括构造方法私有方法等
if (null == handle) {
try {
handle = lookup.findSpecial(callerClass, name, type, callerClass);
} catch (final NoSuchMethodException ignore) {
//ignore
} catch (final IllegalAccessException e) {
throw new UtilException(e);
}
}
return handle;
}
/**
* 查找指定的构造方法
*
* @param callerClass
* @param args 参数
* @return 构造方法句柄
*/
public static MethodHandle findConstructor(final Class<?> callerClass, final Class<?>... args) {
return findConstructor(callerClass, MethodType.methodType(void.class, args));
}
/**
* 查找指定的构造方法
*
* @param callerClass
* @param type 参数类型此处返回类型应为void.class
* @return 构造方法句柄
*/
public static MethodHandle findConstructor(final Class<?> callerClass, final MethodType type) {
final MethodHandles.Lookup lookup = LookupUtil.lookup(callerClass);
try {
return lookup.findConstructor(callerClass, type);
} catch (final NoSuchMethodException e) {
return null;
} catch (final IllegalAccessException e) {
throw new UtilException(e);
}
}
/**
* 执行方法句柄{@link MethodHandle#invoke(Object...)}包装<br>
*

View File

@ -133,25 +133,45 @@ public class ModifierUtil {
}
/**
* 是否是Public成员可检测包括构造字段和方法
* 是否是public成员可检测包括构造字段和方法
*
* @param member 构造字段或方法
* @return 是否是Public
* @return 是否是public
*/
public static boolean isPublic(final Member member) {
return Modifier.isPublic(member.getModifiers());
}
/**
* 是否是Public类
* 是否是public类
*
* @param clazz
* @return 是否是Public
* @return 是否是public
*/
public static boolean isPublic(final Class<?> clazz) {
return Modifier.isPublic(clazz.getModifiers());
}
/**
* 是否是private成员可检测包括构造字段和方法
*
* @param member 构造字段或方法
* @return 是否是private
*/
public static boolean isPrivate(final Member member) {
return Modifier.isPrivate(member.getModifiers());
}
/**
* 是否是private类
*
* @param clazz
* @return 是否是private类
*/
public static boolean isPrivate(final Class<?> clazz) {
return Modifier.isPrivate(clazz.getModifiers());
}
/**
* 是否是static成员包括构造字段或方法
*

View File

@ -12,13 +12,20 @@
package org.dromara.hutool.core.reflect.lookup;
import org.dromara.hutool.core.exceptions.UtilException;
import org.dromara.hutool.core.lang.caller.CallerUtil;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.JdkUtil;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.Constructor;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
/**
* {@link MethodHandles.Lookup}工厂工具用于创建{@link MethodHandles.Lookup}对象<br>
* {@link MethodHandles.Lookup}<br>
* {@link MethodHandles.Lookup}是一个方法句柄查找对象用于在指定类中查找符合给定方法名称方法类型的方法句柄
*
* <p>
@ -44,6 +51,8 @@ public class LookupUtil {
}
}
// region ----- lookup
/**
* jdk8中如果直接调用{@link MethodHandles#lookup()}获取到的{@link MethodHandles.Lookup}在调用findSpecial和unreflectSpecial
* 时会出现权限不够问题抛出"no private access for invokespecial"异常因此针对JDK8及JDK9+分别封装lookup方法
@ -64,4 +73,126 @@ public class LookupUtil {
public static MethodHandles.Lookup lookup(final Class<?> callerClass) {
return factory.lookup(callerClass);
}
// endregion
/**
* {@link Method}或者{@link Constructor} 包装为方法句柄{@link MethodHandle}
*
* @param methodOrConstructor {@link Method}或者{@link Constructor}
* @return 方法句柄{@link MethodHandle}
*/
public static MethodHandle unreflect(final Member methodOrConstructor) {
try {
if (methodOrConstructor instanceof Method) {
return lookup().unreflect((Method) methodOrConstructor);
} else {
return lookup().unreflectConstructor((Constructor<?>) methodOrConstructor);
}
} catch (final IllegalAccessException e) {
throw new UtilException(e);
}
}
// region ----- findMethod
/**
* 查找指定方法的方法句柄<br>
* 此方法只会查找
* <ul>
* <li>当前类的方法包括构造方法和private方法</li>
* <li>父类的方法包括构造方法和private方法</li>
* <li>当前类的static方法</li>
* </ul>
*
* @param callerClass 方法所在类或接口
* @param name 方法名称{@code null}或者空则查找构造方法
* @param returnType 返回值类型
* @param argTypes 返回类型和参数类型列表
* @return 方法句柄 {@link MethodHandle}{@code null}表示未找到方法
*/
public static MethodHandle findMethod(final Class<?> callerClass, final String name,
final Class<?> returnType, final Class<?>... argTypes) {
return findMethod(callerClass, name, MethodType.methodType(returnType, argTypes));
}
/**
* 查找指定方法的方法句柄<br>
* 此方法只会查找
* <ul>
* <li>当前类的方法包括构造方法和private方法</li>
* <li>父类的方法包括构造方法和private方法</li>
* <li>当前类的static方法</li>
* </ul>
*
* @param callerClass 方法所在类或接口
* @param name 方法名称{@code null}或者空则查找构造方法
* @param type 返回类型和参数类型可以使用{@code MethodType#methodType}构建
* @return 方法句柄 {@link MethodHandle}{@code null}表示未找到方法
*/
public static MethodHandle findMethod(final Class<?> callerClass, final String name, final MethodType type) {
if (StrUtil.isBlank(name)) {
return findConstructor(callerClass, type);
}
MethodHandle handle = null;
final MethodHandles.Lookup lookup = LookupUtil.lookup(callerClass);
try {
handle = lookup.findVirtual(callerClass, name, type);
} catch (final IllegalAccessException | NoSuchMethodException ignore) {
//ignore
}
// static方法
if (null == handle) {
try {
handle = lookup.findStatic(callerClass, name, type);
} catch (final IllegalAccessException | NoSuchMethodException ignore) {
//ignore
}
}
// 特殊方法包括构造方法私有方法等
if (null == handle) {
try {
handle = lookup.findSpecial(callerClass, name, type, callerClass);
} catch (final NoSuchMethodException ignore) {
//ignore
} catch (final IllegalAccessException e) {
throw new UtilException(e);
}
}
return handle;
}
// endregion
// region ----- findConstructor
/**
* 查找指定的构造方法
*
* @param callerClass
* @param argTypes 参数类型列表
* @return 构造方法句柄
*/
public static MethodHandle findConstructor(final Class<?> callerClass, final Class<?>... argTypes) {
return findConstructor(callerClass, MethodType.methodType(void.class, argTypes));
}
/**
* 查找指定的构造方法
*
* @param callerClass
* @param type 参数类型此处返回类型应为void.class
* @return 构造方法句柄
*/
public static MethodHandle findConstructor(final Class<?> callerClass, final MethodType type) {
final MethodHandles.Lookup lookup = LookupUtil.lookup(callerClass);
try {
return lookup.findConstructor(callerClass, type);
} catch (final NoSuchMethodException e) {
return null;
} catch (final IllegalAccessException e) {
throw new UtilException(e);
}
}
// endregion
}

View File

@ -11,14 +11,18 @@
*/
/**
* {@link java.lang.invoke.MethodHandles.Lookup} 创建封装<br>
* {@link java.lang.invoke.MethodHandles.Lookup} 创建封装以根据不同的条件查找{@link java.lang.invoke.MethodHandles}<br>
*
*
* <p>
* jdk8中如果直接调用{@link java.lang.invoke.MethodHandles#lookup()}获取到的{@link java.lang.invoke.MethodHandles.Lookup}在调用findSpecial和unreflectSpecial
* 时会出现权限不够问题抛出"no private access for invokespecial"异常因此针对JDK8及JDK9+分别封装lookup方法
* </p>
*
* <p>
* 参考
* <p><a href="https://blog.csdn.net/u013202238/article/details/108687086">https://blog.csdn.net/u013202238/article/details/108687086</a></p>
* 参考https://blog.csdn.net/u013202238/article/details/108687086
*
* @author looly
* @since 6.0.0
*/
package org.dromara.hutool.core.reflect.lookup;

View File

@ -18,7 +18,7 @@ import org.dromara.hutool.core.comparator.StrLengthComparator;
import org.dromara.hutool.core.convert.Convert;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.Validator;
import org.dromara.hutool.core.lang.func.SerFunction;
import org.dromara.hutool.core.func.SerFunction;
import org.dromara.hutool.core.lang.mutable.Mutable;
import org.dromara.hutool.core.lang.mutable.MutableObj;
import org.dromara.hutool.core.map.MapUtil;

View File

@ -16,7 +16,7 @@ import org.dromara.hutool.core.array.ArrayUtil;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.comparator.VersionComparator;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.func.SerFunction;
import org.dromara.hutool.core.func.SerFunction;
import org.dromara.hutool.core.math.NumberUtil;
import org.dromara.hutool.core.regex.ReUtil;
import org.dromara.hutool.core.text.finder.CharFinder;
@ -27,7 +27,6 @@ import org.dromara.hutool.core.text.replacer.RangeReplacerByChar;
import org.dromara.hutool.core.text.replacer.RangeReplacerByStr;
import org.dromara.hutool.core.text.replacer.SearchReplacer;
import org.dromara.hutool.core.text.split.SplitUtil;
import org.dromara.hutool.core.util.*;
import org.dromara.hutool.core.util.ByteUtil;
import org.dromara.hutool.core.util.CharUtil;
import org.dromara.hutool.core.util.CharsetUtil;

View File

@ -19,7 +19,6 @@ import org.dromara.hutool.core.regex.PatternPool;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.text.finder.*;
import org.dromara.hutool.core.util.CharUtil;
import org.dromara.hutool.core.text.finder.*;
import java.util.ArrayList;
import java.util.List;

View File

@ -14,12 +14,11 @@ package org.dromara.hutool.core.tree;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.func.SerBiConsumer;
import org.dromara.hutool.core.func.SerConsumer;
import org.dromara.hutool.core.func.SerFunction;
import org.dromara.hutool.core.func.SerPredicate;
import org.dromara.hutool.core.lang.Opt;
import org.dromara.hutool.core.lang.func.*;
import org.dromara.hutool.core.lang.func.SerBiConsumer;
import org.dromara.hutool.core.lang.func.SerConsumer;
import org.dromara.hutool.core.lang.func.SerFunction;
import org.dromara.hutool.core.lang.func.SerPredicate;
import org.dromara.hutool.core.stream.EasyStream;
import java.util.ArrayList;

View File

@ -13,8 +13,8 @@
package org.dromara.hutool.core.util;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.func.LambdaUtil;
import org.dromara.hutool.core.lang.func.SerFunction;
import org.dromara.hutool.core.func.LambdaUtil;
import org.dromara.hutool.core.func.SerFunction;
import org.dromara.hutool.core.map.MapUtil;
import org.dromara.hutool.core.reflect.FieldUtil;
import org.dromara.hutool.core.text.StrUtil;

View File

@ -5,7 +5,7 @@ import org.dromara.hutool.core.collection.iter.LineIter;
import org.dromara.hutool.core.io.resource.ResourceUtil;
import org.dromara.hutool.core.io.stream.EmptyOutputStream;
import org.dromara.hutool.core.io.stream.StrInputStream;
import org.dromara.hutool.core.lang.func.SerConsumer;
import org.dromara.hutool.core.func.SerConsumer;
import org.dromara.hutool.core.util.CharsetUtil;
import org.dromara.hutool.core.util.RandomUtil;
import org.junit.jupiter.api.Assertions;

View File

@ -3,6 +3,7 @@ package org.dromara.hutool.core.lang.func;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.date.DateUtil;
import org.dromara.hutool.core.date.StopWatch;
import org.dromara.hutool.core.func.FunctionPool;
import org.dromara.hutool.core.util.RandomUtil;
import org.junit.jupiter.api.Test;

View File

@ -1,12 +1,14 @@
package org.dromara.hutool.core.lang.func;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.reflect.ConstructorUtil;
import org.dromara.hutool.core.reflect.MethodHandleUtil;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.SneakyThrows;
import org.dromara.hutool.core.collection.ListUtil;
import org.dromara.hutool.core.func.LambdaFactory;
import org.dromara.hutool.core.func.SerSupplier;
import org.dromara.hutool.core.reflect.ConstructorUtil;
import org.dromara.hutool.core.reflect.lookup.LookupUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
@ -143,7 +145,7 @@ public class LambdaFactoryTest {
something.setId(1L);
something.setName("name");
final Method getByReflect = Something.class.getMethod("getId");
final MethodHandle getByMh = MethodHandleUtil.findMethod(Something.class, "getId", MethodType.methodType(Long.class));
final MethodHandle getByMh = LookupUtil.findMethod(Something.class, "getId", MethodType.methodType(Long.class));
final Function getByProxy = MethodHandleProxies.asInterfaceInstance(Function.class, MethodHandles.lookup().unreflect(getByReflect));
final Function getByLambda = LambdaFactory.build(Function.class, getByReflect);
final Task lambdaTask = new Task("lambda", () -> getByLambda.apply(something));
@ -230,7 +232,7 @@ public class LambdaFactoryTest {
something.setId(1L);
something.setName("name");
final Method setByReflect = Something.class.getMethod("setName", String.class);
final MethodHandle setByMh = MethodHandleUtil.findMethod(Something.class, "setName", MethodType.methodType(Void.TYPE, String.class));
final MethodHandle setByMh = LookupUtil.findMethod(Something.class, "setName", MethodType.methodType(Void.TYPE, String.class));
final BiConsumer setByProxy = MethodHandleProxies.asInterfaceInstance(BiConsumer.class, setByMh);
final BiConsumer setByLambda = LambdaFactory.build(BiConsumer.class, setByReflect);
final String name = "name1";

View File

@ -1,5 +1,6 @@
package org.dromara.hutool.core.lang.func;
import org.dromara.hutool.core.func.*;
import org.dromara.hutool.core.lang.Tuple;
import org.dromara.hutool.core.reflect.MethodUtil;
import lombok.AllArgsConstructor;

View File

@ -1,6 +1,7 @@
package org.dromara.hutool.core.lang.func;
import org.dromara.hutool.core.collection.set.SetUtil;
import org.dromara.hutool.core.func.PredicateUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

View File

@ -4,8 +4,6 @@ import org.dromara.hutool.core.classloader.ClassLoaderUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodType;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
@ -66,65 +64,6 @@ public class MethodHandleUtilTest {
Assertions.assertEquals("Duck 78", result);
}
@Test
public void findMethodTest() throws Throwable {
MethodHandle handle = MethodHandleUtil.findMethod(Duck.class, "quack",
MethodType.methodType(String.class));
Assertions.assertNotNull(handle);
// 对象方法自行需要绑定对象或者传入对象参数
final String invoke = (String) handle.invoke(new BigDuck());
Assertions.assertEquals("Quack", invoke);
// 对象的方法获取
handle = MethodHandleUtil.findMethod(BigDuck.class, "getSize",
MethodType.methodType(int.class));
Assertions.assertNotNull(handle);
final int invokeInt = (int) handle.invoke(new BigDuck());
Assertions.assertEquals(36, invokeInt);
}
@Test
public void findStaticMethodTest() throws Throwable {
final MethodHandle handle = MethodHandleUtil.findMethod(Duck.class, "getDuck",
MethodType.methodType(String.class, int.class));
Assertions.assertNotNull(handle);
// static 方法执行不需要绑定或者传入对象直接传入参数即可
final String invoke = (String) handle.invoke(12);
Assertions.assertEquals("Duck 12", invoke);
}
@Test
public void findPrivateMethodTest() throws Throwable {
final MethodHandle handle = MethodHandleUtil.findMethod(BigDuck.class, "getPrivateValue",
MethodType.methodType(String.class));
Assertions.assertNotNull(handle);
final String invoke = (String) handle.invoke(new BigDuck());
Assertions.assertEquals("private value", invoke);
}
@Test
public void findSuperMethodTest() throws Throwable {
// 查找父类的方法
final MethodHandle handle = MethodHandleUtil.findMethod(BigDuck.class, "quack",
MethodType.methodType(String.class));
Assertions.assertNotNull(handle);
final String invoke = (String) handle.invoke(new BigDuck());
Assertions.assertEquals("Quack", invoke);
}
@Test
public void findPrivateStaticMethodTest() throws Throwable {
final MethodHandle handle = MethodHandleUtil.findMethod(BigDuck.class, "getPrivateStaticValue",
MethodType.methodType(String.class));
Assertions.assertNotNull(handle);
final String invoke = (String) handle.invoke();
Assertions.assertEquals("private static value", invoke);
}
interface Duck {
default String quack() {
return "Quack";

View File

@ -0,0 +1,106 @@
/*
* Copyright (c) 2023 looly(loolly@aliyun.com)
* Hutool is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
package org.dromara.hutool.core.reflect.lookup;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodType;
public class LookupUtilTest {
@Test
public void findMethodTest() throws Throwable {
MethodHandle handle = LookupUtil.findMethod(Duck.class, "quack",
MethodType.methodType(String.class));
Assertions.assertNotNull(handle);
// 对象方法自行需要绑定对象或者传入对象参数
final String invoke = (String) handle.invoke(new BigDuck());
Assertions.assertEquals("Quack", invoke);
// 对象的方法获取
handle = LookupUtil.findMethod(BigDuck.class, "getSize",
MethodType.methodType(int.class));
Assertions.assertNotNull(handle);
final int invokeInt = (int) handle.invoke(new BigDuck());
Assertions.assertEquals(36, invokeInt);
}
@Test
public void findStaticMethodTest() throws Throwable {
final MethodHandle handle = LookupUtil.findMethod(Duck.class, "getDuck",
MethodType.methodType(String.class, int.class));
Assertions.assertNotNull(handle);
// static 方法执行不需要绑定或者传入对象直接传入参数即可
final String invoke = (String) handle.invoke(12);
Assertions.assertEquals("Duck 12", invoke);
}
@Test
public void findPrivateMethodTest() throws Throwable {
final MethodHandle handle = LookupUtil.findMethod(BigDuck.class, "getPrivateValue",
MethodType.methodType(String.class));
Assertions.assertNotNull(handle);
final String invoke = (String) handle.invoke(new BigDuck());
Assertions.assertEquals("private value", invoke);
}
@Test
public void findSuperMethodTest() throws Throwable {
// 查找父类的方法
final MethodHandle handle = LookupUtil.findMethod(BigDuck.class, "quack",
MethodType.methodType(String.class));
Assertions.assertNotNull(handle);
final String invoke = (String) handle.invoke(new BigDuck());
Assertions.assertEquals("Quack", invoke);
}
@Test
public void findPrivateStaticMethodTest() throws Throwable {
final MethodHandle handle = LookupUtil.findMethod(BigDuck.class, "getPrivateStaticValue",
MethodType.methodType(String.class));
Assertions.assertNotNull(handle);
final String invoke = (String) handle.invoke();
Assertions.assertEquals("private static value", invoke);
}
interface Duck {
default String quack() {
return "Quack";
}
static String getDuck(final int count){
return "Duck " + count;
}
}
static class BigDuck implements Duck {
public int getSize(){
return 36;
}
@SuppressWarnings("unused")
private String getPrivateValue(){
return "private value";
}
@SuppressWarnings("unused")
private static String getPrivateStaticValue(){
return "private static value";
}
}
}

View File

@ -12,7 +12,7 @@
package org.dromara.hutool.crypto;
import org.dromara.hutool.core.lang.func.Wrapper;
import org.dromara.hutool.core.func.Wrapper;
import javax.crypto.Cipher;
import java.security.InvalidAlgorithmParameterException;

View File

@ -12,12 +12,10 @@
package org.dromara.hutool.db;
import org.dromara.hutool.core.lang.func.SerFunction;
import org.dromara.hutool.core.func.SerFunction;
import org.dromara.hutool.db.dialect.Dialect;
import org.dromara.hutool.db.handler.*;
import org.dromara.hutool.db.sql.*;
import org.dromara.hutool.db.handler.*;
import org.dromara.hutool.db.sql.*;
import org.dromara.hutool.db.sql.Condition.LikeType;
import javax.sql.DataSource;

View File

@ -12,7 +12,7 @@
package org.dromara.hutool.db;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.SerSupplier;
import org.dromara.hutool.core.map.MapUtil;
import java.util.Collection;

View File

@ -12,7 +12,7 @@
package org.dromara.hutool.db;
import org.dromara.hutool.core.lang.func.SerConsumer;
import org.dromara.hutool.core.func.SerConsumer;
import org.dromara.hutool.db.dialect.Dialect;
import org.dromara.hutool.db.dialect.DialectFactory;
import org.dromara.hutool.db.ds.DSUtil;

View File

@ -14,7 +14,7 @@ package org.dromara.hutool.db;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.collection.set.SetUtil;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.SerSupplier;
import org.dromara.hutool.core.map.Dict;
import org.dromara.hutool.core.reflect.MethodUtil;
import org.dromara.hutool.core.text.StrUtil;

View File

@ -12,7 +12,7 @@
package org.dromara.hutool.db;
import org.dromara.hutool.core.lang.func.SerConsumer;
import org.dromara.hutool.core.func.SerConsumer;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.db.dialect.Dialect;
import org.dromara.hutool.db.dialect.DialectFactory;

View File

@ -14,7 +14,7 @@ package org.dromara.hutool.db.ds;
import org.dromara.hutool.core.exceptions.CloneRuntimeException;
import org.dromara.hutool.core.io.IoUtil;
import org.dromara.hutool.core.lang.func.Wrapper;
import org.dromara.hutool.core.func.Wrapper;
import javax.sql.DataSource;
import java.io.Closeable;

View File

@ -14,7 +14,7 @@ package org.dromara.hutool.db.sql;
import org.dromara.hutool.core.collection.iter.ArrayIter;
import org.dromara.hutool.core.io.IoUtil;
import org.dromara.hutool.core.lang.func.SerFunction;
import org.dromara.hutool.core.func.SerFunction;
import org.dromara.hutool.db.DbRuntimeException;
import org.dromara.hutool.db.StatementUtil;
import org.dromara.hutool.db.handler.RsHandler;

View File

@ -12,7 +12,7 @@
package org.dromara.hutool.db.sql;
import org.dromara.hutool.core.lang.func.Wrapper;
import org.dromara.hutool.core.func.Wrapper;
import java.io.InputStream;
import java.io.Reader;

View File

@ -13,10 +13,10 @@
package org.dromara.hutool.json;
import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.lang.func.LambdaInfo;
import org.dromara.hutool.core.lang.func.LambdaUtil;
import org.dromara.hutool.core.lang.func.SerFunction;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.LambdaInfo;
import org.dromara.hutool.core.func.LambdaUtil;
import org.dromara.hutool.core.func.SerFunction;
import org.dromara.hutool.core.func.SerSupplier;
import org.dromara.hutool.core.lang.mutable.MutableEntry;
import org.dromara.hutool.core.map.MapUtil;
import org.dromara.hutool.core.map.MapWrapper;

View File

@ -12,7 +12,7 @@
package org.dromara.hutool.json.serialize;
import org.dromara.hutool.core.lang.func.Wrapper;
import org.dromara.hutool.core.func.Wrapper;
/**
* {@code JSONString}接口定义了一个{@code toJSONString()}<br>

View File

@ -16,7 +16,7 @@ import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.io.IORuntimeException;
import org.dromara.hutool.core.io.IoUtil;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.func.SerConsumer;
import org.dromara.hutool.core.func.SerConsumer;
import org.dromara.hutool.core.util.CharsetUtil;
import org.dromara.hutool.core.util.ObjUtil;

View File

@ -15,7 +15,7 @@ package org.dromara.hutool.poi.csv;
import org.dromara.hutool.core.io.IORuntimeException;
import org.dromara.hutool.core.io.IoUtil;
import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.lang.func.SerConsumer;
import org.dromara.hutool.core.func.SerConsumer;
import java.io.Closeable;
import java.io.File;

View File

@ -14,7 +14,7 @@ package org.dromara.hutool.poi.excel;
import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.func.SerBiConsumer;
import org.dromara.hutool.core.func.SerBiConsumer;
import org.dromara.hutool.poi.excel.cell.CellEditor;
import org.dromara.hutool.poi.excel.cell.CellUtil;
import org.dromara.hutool.poi.excel.reader.BeanSheetReader;

View File

@ -1,7 +1,7 @@
package org.dromara.hutool.poi.csv;
import org.dromara.hutool.core.io.file.FileUtil;
import org.dromara.hutool.core.lang.func.SerConsumer;
import org.dromara.hutool.core.func.SerConsumer;
import org.dromara.hutool.core.util.CharsetUtil;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

View File

@ -2,7 +2,7 @@ package org.dromara.hutool.poi.excel;
import org.dromara.hutool.core.io.resource.ResourceUtil;
import org.dromara.hutool.core.lang.Console;
import org.dromara.hutool.core.lang.func.SerBiConsumer;
import org.dromara.hutool.core.func.SerBiConsumer;
import org.dromara.hutool.core.map.MapUtil;
import org.dromara.hutool.core.util.ObjUtil;
import lombok.Data;

View File

@ -15,9 +15,9 @@ package org.dromara.hutool.setting;
import org.dromara.hutool.core.bean.BeanUtil;
import org.dromara.hutool.core.bean.copier.CopyOptions;
import org.dromara.hutool.core.bean.copier.ValueProvider;
import org.dromara.hutool.core.lang.func.LambdaInfo;
import org.dromara.hutool.core.lang.func.LambdaUtil;
import org.dromara.hutool.core.lang.func.SerFunction;
import org.dromara.hutool.core.func.LambdaInfo;
import org.dromara.hutool.core.func.LambdaUtil;
import org.dromara.hutool.core.func.SerFunction;
import org.dromara.hutool.core.lang.getter.GroupedTypeGetter;
import org.dromara.hutool.core.lang.getter.TypeGetter;
import org.dromara.hutool.core.reflect.ConstructorUtil;

View File

@ -22,8 +22,8 @@ import org.dromara.hutool.core.io.watch.SimpleWatcher;
import org.dromara.hutool.core.io.watch.WatchMonitor;
import org.dromara.hutool.core.io.watch.WatchUtil;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.func.LambdaUtil;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.LambdaUtil;
import org.dromara.hutool.core.func.SerSupplier;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.core.util.CharUtil;
import org.dromara.hutool.core.util.CharsetUtil;

View File

@ -23,10 +23,10 @@ import org.dromara.hutool.core.io.watch.SimpleWatcher;
import org.dromara.hutool.core.io.watch.WatchMonitor;
import org.dromara.hutool.core.io.watch.WatchUtil;
import org.dromara.hutool.core.lang.Assert;
import org.dromara.hutool.core.lang.func.LambdaInfo;
import org.dromara.hutool.core.lang.func.LambdaUtil;
import org.dromara.hutool.core.lang.func.SerFunction;
import org.dromara.hutool.core.lang.func.SerSupplier;
import org.dromara.hutool.core.func.LambdaInfo;
import org.dromara.hutool.core.func.LambdaUtil;
import org.dromara.hutool.core.func.SerFunction;
import org.dromara.hutool.core.func.SerSupplier;
import org.dromara.hutool.core.lang.getter.TypeGetter;
import org.dromara.hutool.core.map.MapUtil;
import org.dromara.hutool.core.reflect.ConstructorUtil;