diff --git a/src/main/java/com/github/dadiyang/equator/FieldBaseEquator.java b/src/main/java/com/github/dadiyang/equator/FieldBaseEquator.java index 6a98b1a..62311e1 100644 --- a/src/main/java/com/github/dadiyang/equator/FieldBaseEquator.java +++ b/src/main/java/com/github/dadiyang/equator/FieldBaseEquator.java @@ -93,11 +93,12 @@ private Map getAllFields(Object obj) { if (obj == null) { return Collections.emptyMap(); } - return CACHE.computeIfAbsent(obj.getClass(), k -> { + Class clazz = obj.getClass(); + Map allField = CACHE.get(clazz); + if (allField == null) { Map fieldMap = new HashMap<>(8); - Class cls = k; - while (cls != Object.class) { - Field[] fields = cls.getDeclaredFields(); + while (clazz != Object.class) { + Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { // 一些通过字节码注入改写类的框架会合成一些字段,如 jacoco 的 $jacocoData 字段 // 正常情况下这些字段都需要被排除掉 @@ -105,9 +106,11 @@ private Map getAllFields(Object obj) { fieldMap.put(field.getName(), field); } } - cls = cls.getSuperclass(); + clazz = clazz.getSuperclass(); } + CACHE.put(clazz, fieldMap); return fieldMap; - }); + } + return allField; } -} +} \ No newline at end of file diff --git a/src/main/java/com/github/dadiyang/equator/GetterBaseEquator.java b/src/main/java/com/github/dadiyang/equator/GetterBaseEquator.java index 450a14d..c90b1e7 100644 --- a/src/main/java/com/github/dadiyang/equator/GetterBaseEquator.java +++ b/src/main/java/com/github/dadiyang/equator/GetterBaseEquator.java @@ -110,8 +110,9 @@ private Map getAllGetters(Object obj) { if (obj == null) { return Collections.emptyMap(); } - return CACHE.computeIfAbsent(obj.getClass(), k -> { - Class clazz = obj.getClass(); + Class clazz = obj.getClass(); + Map allGetMethods = CACHE.get(clazz); + if (allGetMethods == null) { Map getters = new LinkedHashMap<>(8); while (clazz != Object.class) { Method[] methods = clazz.getDeclaredMethods(); @@ -136,8 +137,10 @@ private Map getAllGetters(Object obj) { } clazz = clazz.getSuperclass(); //得到父类,然后赋给自己 } + CACHE.put(clazz, getters); return getters; - }); + } + return allGetMethods; } /**