This commit is contained in:
@@ -5,8 +5,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.redkale.util;
|
package org.redkale.util;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
import java.util.function.*;
|
||||||
import jdk.internal.org.objectweb.asm.*;
|
import jdk.internal.org.objectweb.asm.*;
|
||||||
import static jdk.internal.org.objectweb.asm.Opcodes.*;
|
import static jdk.internal.org.objectweb.asm.Opcodes.*;
|
||||||
|
|
||||||
@@ -596,4 +596,49 @@ public interface Attribute<T, F> {
|
|||||||
throw new RuntimeException(ex);
|
throw new RuntimeException(ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据Class、字段名、字段类型、getter和setter方法生成 Attribute 对象。 clazz、fieldname、fieldtype都不能为null
|
||||||
|
*
|
||||||
|
* @param <T> 依附类的类型
|
||||||
|
* @param <F> 字段类型
|
||||||
|
* @param clazz 指定依附的类
|
||||||
|
* @param fieldname 字段名
|
||||||
|
* @param fieldtype 字段类型
|
||||||
|
* @param getter getter方法
|
||||||
|
* @param setter setter方法
|
||||||
|
*
|
||||||
|
* @return Attribute对象
|
||||||
|
*/
|
||||||
|
public static <T, F> Attribute<T, F> create(final Class<T> clazz, final String fieldname, final Class<F> fieldtype, final Function<T, F> getter, final BiConsumer<T, F> setter) {
|
||||||
|
Objects.requireNonNull(clazz);
|
||||||
|
Objects.requireNonNull(fieldname);
|
||||||
|
Objects.requireNonNull(fieldtype);
|
||||||
|
return new Attribute<T, F>() {
|
||||||
|
@Override
|
||||||
|
public Class<F> type() {
|
||||||
|
return fieldtype;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<T> declaringClass() {
|
||||||
|
return clazz;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String field() {
|
||||||
|
return fieldname;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public F get(T obj) {
|
||||||
|
return getter == null ? null : getter.apply(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void set(T obj, F value) {
|
||||||
|
if (setter != null) setter.accept(obj, value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user