一、反射
public class CommonFieldsSetter {
public static void setCommonFields(Object obj) {
String a = "";
String b = "";
try {
Class<?> clazz = obj.getClass();
Field fieldA = clazz.getDeclaredField("a");
Field fieldB = clazz.getDeclaredField("b");
fieldA.setAccessible(true);
fieldB.setAccessible(true);
fieldA.set(obj, a);
fieldB.set(obj, b);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
// Handle exceptions as needed
}
}
}
A aInstance = new A();
B bInstance = new B();
C cInstance = new C();
CommonFieldsSetter.setCommonFields(aInstance);
CommonFieldsSetter.setCommonFields(bInstance);
CommonFieldsSetter.setCommonFields(cInstance);
二、jdk8 函数式
@FunctionalInterface
interface FieldSetter {
void setFields(Object obj);
}
编写一个通用方法,接受一个FieldSetter实例和一个对象,然后在方法内调用setFields方法来设置字段的值:
public class CommonFieldsSetter {
public static void setCommonFields(Object obj, FieldSetter fieldSetter) {
fieldSetter.setFields(obj);
}
}
A aInstance = new A();
B bInstance = new B();
C cInstance = new C();
// 使用Lambda表达式设置字段值
CommonFieldsSetter.setCommonFields(aInstance, (obj) -> {
A a = (A) obj;
a.a = "aa";
a.b = "bb";
});
CommonFieldsSetter.setCommonFields(bInstance, (obj) -> {
B b = (B) obj;
b.a = "aa";
b.b = "bb";
});
CommonFieldsSetter.setCommonFields(cInstance, (obj) -> {
C c = (C) obj;
c.a = "aa";
c.b = "bb";
});