Android Open Source - droidkit-engines Weak Equal Reference






From Project

Back to project page droidkit-engines.

License

The source code is released under:

MIT License

If you think the Android project droidkit-engines listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.droidkit.engine._internal.util;
/*from  ww  w. jav  a  2s .  c  om*/
import java.lang.ref.WeakReference;

public class WeakEqualReference<T> extends WeakReference<T> {

    public static final boolean USE_AS_STRONG_REFERENCE = true;

    private int cachedHashCode = 0;

    private T ref;

    public WeakEqualReference(T r) {
        super(r);
        if(USE_AS_STRONG_REFERENCE) {
            ref = r;
        }
    }

    @Override
    public T get() {
        if(USE_AS_STRONG_REFERENCE) {
            return ref;
        } else {
            return super.get();
        }
    }

    @SuppressWarnings("unchecked")
    @Override
    public boolean equals(Object other) {

        boolean returnValue = super.equals(other);

        // If we're not equal, then check equality using referenced objects
        if (!returnValue && (other instanceof WeakEqualReference<?>)) {
            T value = this.get();
            if (null != value) {
                T otherValue = ((WeakEqualReference<T>) other).get();

                // The delegate equals should handle otherValue == null
                returnValue = value.equals(otherValue);
            }
        }

        return returnValue;
    }

    @Override
    public int hashCode() {
        // The real hash code can be equals to zero as well, but there is nothing bad if we'll recalculate it
        // We can't removeItem WeakEqualReference from set if hash code was changed, see
        // http://stackoverflow.com/questions/254441/hashset-removeItem-and-iterator-removeItem-not-working
        if(cachedHashCode == 0) {
            T value = this.get();
            cachedHashCode  = value != null ? value.hashCode() : super.hashCode();
        }
        return cachedHashCode;
    }
}




Java Source Code List

com.droidkit.engine.Engines.java
com.droidkit.engine.common.KeyCallback.java
com.droidkit.engine.common.ValueCallback.java
com.droidkit.engine.common.ValuesCallback.java
com.droidkit.engine.event.Events.java
com.droidkit.engine.event.NotificationCenter.java
com.droidkit.engine.event.NotificationListener.java
com.droidkit.engine.event.StateInitValue.java
com.droidkit.engine.event.State.java
com.droidkit.engine._internal.RunnableActor.java
com.droidkit.engine._internal.sqlite.AbstractDao.java
com.droidkit.engine._internal.sqlite.BinarySerializator.java
com.droidkit.engine._internal.sqlite.DbHelper.java
com.droidkit.engine._internal.sqlite.DbProvider.java
com.droidkit.engine._internal.sqlite.FastCursor.java
com.droidkit.engine._internal.sqlite.SqlStatements.java
com.droidkit.engine._internal.util.SortedArrayList.java
com.droidkit.engine._internal.util.Utils.java
com.droidkit.engine._internal.util.WeakEqualReference.java
com.droidkit.engine.keyvalue.DataAdapter.java
com.droidkit.engine.keyvalue.KeyValueEngine.java
com.droidkit.engine.keyvalue.StorageAdapter.java
com.droidkit.engine.keyvalue.sqlite.SQLiteStorageAdapter.java
com.droidkit.engine.keyvalue.sqlite.internal.KeyValueEngineDao.java
com.droidkit.engine.keyvalue.sqlite.internal.KeyValueEngineTableStatements.java
com.droidkit.engine.list.DataAdapter.java
com.droidkit.engine.list.ListEngine.java
com.droidkit.engine.list.StorageAdapter.java
com.droidkit.engine.list.sqlite.SQLiteMultipleStorageAdapter.java
com.droidkit.engine.list.sqlite.SQLiteStorageAdapter.java
com.droidkit.engine.list.sqlite.internal.ListEngineDao.java
com.droidkit.engine.list.sqlite.internal.ListEngineTableStatements.java
com.droidkit.sample.ActivityHelper.java
com.droidkit.sample.BaseActivity.java
com.droidkit.sample.TestMainActivity.java
com.droidkit.sample.listenginetest.TestListEngineActivity.java
com.droidkit.sample.listenginetest.TestProto.java
com.droidkit.sample.view.BlockingListView.java