Field[] fields = ReflectUtil.getFields(eventData.getClass()); for (Field field : fields) { if (Objects.isNull(field.getAnnotation(TranslateFileds.class))) { continue; } TranslateFiled[] actions = field.getAnnotationsByType(TranslateFiled.class); for (TranslateFiled action : actions) { Field translateFiledDesc = ReflectUtil.getField(eventData.getClass(), field.getName() + "Desc"); if (!translateFiledDesc.isAccessible()) { translateFiledDesc.setAccessible(true); } if (action.key().equals(field.get(eventData))) { translateFiledDesc.set(eventData, action.value()); } } },优化下这段代码的执行速度,并给出速度更快的代码
时间: 2023-03-01 13:01:43 浏览: 69
ReflectUtil.cs
优化代码的执行速度的方法可以多样,以下是其中一种可能的方法:
1. 创建一个 Map,以字段的 key 值作为键,对应的 value 值作为值,这样就可以减少通过反射查询每个字段的次数。
2. 如果所有的 TranslateFiled 都有相同的 value,可以考虑将其移到循环外面,避免重复调用。
示例代码:
```
Map<Object, String> map = new HashMap<>();
Field[] fields = ReflectUtil.getFields(eventData.getClass());
for (Field field : fields) {
if (Objects.isNull(field.getAnnotation(TranslateFileds.class))) {
continue;
}
TranslateFiled[] actions = field.getAnnotationsByType(TranslateFiled.class);
for (TranslateFiled action : actions) {
map.put(action.key(), action.value());
}
}
for (Field field : fields) {
if (Objects.isNull(field.getAnnotation(TranslateFileds.class))) {
continue;
}
Field translateFiledDesc = ReflectUtil.getField(eventData.getClass(), field.getName() + "Desc");
if (!translateFiledDesc.isAccessible()) {
translateFiledDesc.setAccessible(true);
}
translateFiledDesc.set(eventData, map.get(field.get(eventData)));
}
```
阅读全文