案例
public class Test{
private static Map<String, String> fieldMap = new HashMap<>();
/**
* 发布A
*/
public static final String PUBLISH_A= "";
/**
* 新建A
*/
public static final String CREATE_A= "";
static {
Field[] fields = Test.class.getDeclaredFields();
fieldMap = new HashMap<>();
for(Field field : fields) {
try {
fieldMap.put(field.getName(), field.get(Test.class).toString());
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
public static String findCode(String code) {
return fieldMap.get(code);
}
}
void test() {
when:
SFLeadConverter.InnerLead innerLead = new SFLeadConverter.InnerLead();
Lead lead = new Lead();
List<CustomFieldDTO> customFields = new ArrayList<>();
Field[] fields = innerLead.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
customFields.add(new CustomFieldDTO(field.getName(), (String) field.get(innerLead)));
}
lead.setFieldValues(customFields);
println lead;
then:
1 == 1;
}
参考:https://blog.csdn.net/gaoshan12345678910/article/details/84305475
static静态代码块
作用:完成fieldMap的初始化,fields为反射方法,获取所有声明的字段,并将变量名与变量值存入map,这里的变量都是String类型
反射获取其他变量值的内容:
https://blog.csdn.net/zknxx/article/details/46121057
AOP切面中通过反射获取入参名与入参值
private Map<String, Object> getParaNameAndValue(ProceedingJoinPoint joinPoint) {
Map<String, Object> param = new HashMap<>();
Object[] paramValues = joinPoint.getArgs();
Signature signature = joinPoint.getSignature();
String[] paramNames = null;
if (signature instanceof CodeSignature) {
paramNames = ((CodeSignature) signature).getParameterNames();
}
for (int i = 0; i < paramNames.length; i++) {
param.put(paramNames[i], paramValues[i]);
}
return param;
}
反射获取list中的值
Field[] fields = myObject.getClass().getDeclaredFields();
for (Field field : fields) {
if ("AAA".equalsIgnoreCase(field.getName())) {
field.setAccessible(true);
List<AAA> fieldValue = (List) field.get(myObject);
}
}
获取某个特殊类型的name与value
def "test"() {
when:
Class clazz = Class.forName("com.a.aClass");
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
if( Modifier.isStatic(field.getModifiers())){
I18nString i18nString = field.get(I18nString)
System.out.println(i18nString.getDescription());
System.out.println(field.getName());
System.out.println(i18nString.getStaringCode());
}
}
then:
def e = thrown(Exception)
e instanceof Exception
}
获取某个Enum中的值
@Test
void 'test'() {
when:
Class clazz = Class.forName("com.cg.exception.SaaSResponseCode");
for(SaaSResponseCode saaSResponseCode : SaaSResponseCode) {
println saaSResponseCode.getDesc()
println saaSResponseCode.getStarlingKey()
}
then:
def e = thrown(Exception)
e instanceof Exception
}