mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-24 18:04:54 +08:00
fix code
This commit is contained in:
parent
43bada713d
commit
19f6ea76ca
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
/**
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
/**
|
||||
* 包装接口
|
@ -19,4 +19,4 @@
|
||||
* @author looly
|
||||
*
|
||||
*/
|
||||
package org.dromara.hutool.core.lang.func;
|
||||
package org.dromara.hutool.core.func;
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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>
|
||||
*
|
||||
|
@ -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成员,包括构造、字段或方法
|
||||
*
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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";
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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";
|
||||
|
@ -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";
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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>
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user