diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/intern/WeakInterner.java b/hutool-core/src/main/java/cn/hutool/core/lang/intern/WeakInterner.java index 7f9b8615d..335828950 100755 --- a/hutool-core/src/main/java/cn/hutool/core/lang/intern/WeakInterner.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/intern/WeakInterner.java @@ -2,6 +2,8 @@ package cn.hutool.core.lang.intern; import cn.hutool.core.map.WeakConcurrentMap; +import java.lang.ref.WeakReference; + /** * 使用WeakHashMap(线程安全)存储对象的规范化对象,注意此对象需单例使用!
* @@ -10,13 +12,16 @@ import cn.hutool.core.map.WeakConcurrentMap; */ public class WeakInterner implements Interner{ - private final WeakConcurrentMap cache = new WeakConcurrentMap<>(); + private final WeakConcurrentMap> cache = new WeakConcurrentMap<>(); - @Override public T intern(T sample) { - if(null == sample){ + if (sample == null) { return null; } - return cache.computeIfAbsent(sample, (key)->sample); + T val; + do { + val = this.cache.computeIfAbsent(sample, WeakReference::new).get(); + } while (val == null); + return val; } }