• Android之仿String的对象驻留


    String a = "abc";

    String b = "abc";

    a == b     true;

    变量a和变量b是同一个值。这不只是说它俩的值是一样的,而是说就是同一个字符串对象。用Java的话来说就是a==b的结果是true。然而这个只对字符串以及小的整型或者长整型有效。其它的对象是不会被驻留的,也就是说如果你创建了两个对象而他们的值是相等的,但他们并不是同一个对象。这个问题有时候很讨厌,尤其是当你从某个持久化存储中取出一个对象时。如果同一个对象你取了两次,你当然希望最终取出的是同一个对象,不过实际上你取出的是两份拷贝。换句话说你其实希望的是取出的是存储中那个对象在内存里面的同一个拷贝。有些存储层是会做这样的处理的。比如说JPA的实现就是遵循这个模式的,而别的情况可能你就得自己去做缓存了。

    如何让自己的对象,也好似上面string一样呢;使用下面这个类吧

    import java.lang.ref.WeakReference;
    import java.util.WeakHashMap;
    
    class WeakPool<T> {
        private final WeakHashMap<T, WeakReference<T>> pool = new WeakHashMap<T, WeakReference<T>>();
    
        public T get(T object) {
            final T res;
            WeakReference<T> ref = pool.get(object);
            if (ref != null) {
                res = ref.get();
            } else {
                res = null;
            }
            return res;
        }
    
        public void put(T object) {
            pool.put(object, new WeakReference<T>(object));
        }
    }
  • 相关阅读:
    10.异常
    9.1 oop习题集合
    9.抽象类和接口
    8.oop-多态
    AngularJs学习笔记二
    浅谈如何坚持计划
    妙味课堂——JavaScript基础课程笔记
    前端学习-试卷
    jquery实战
    boost any
  • 原文地址:https://www.cnblogs.com/lee0oo0/p/3606489.html
Copyright © 2020-2023  润新知