Skip to content

WeakReference property delegate proposal

License

Notifications You must be signed in to change notification settings

Karumi/WeakDelegate

Repository files navigation

Weak Delegate

This project implements a Kotlin wrapper for the almighty (and sometimes scary) weak references so that you can use them in a more friendly way.

Usage

Weak references are often feared but are one of the most important tools Java and Kotlin developers have. If you are still unsure if you should use them just read one of the multiple resources linked below.

However, if you ever tried to use a weak reference in kotlin you probably found yourself writing things like:

class SomeClass {
    private var wr: WeakReference<Data>? = null

    fun foo(data: Data) {
        wr = WeakReference(data)
    }

    fun bar() {
        val sr = wr?.get()

        if (sr != null) {
            print(sr)
        }
    }
}

Would not it be better if we used the full potential of delegated properties for that matter? Weak Delegate creates one for you. Compare the previous example to the usage of Weak Delegate:

class SomeClass {
    private val weakRef: Data? by weak(Data("Some Data"))
    private var weakRefVar: Data? by weak()

    fun set(data: Data) {
        weakRefVar = data
    }

    fun bar() {
        val strongRef = weakRef

        if (strongRef != null) {
            print(strongRef)
        }
    }
}

No more references to WeakReferences or get methods. Internally, Weak Delegate is doing the WeakReference <-> Nullable conversions for you.

Installation

Add the jitpack repository and include the WeakDelegate dependency to your build.gradle configuration:

repositories { 
     maven { url "https://jitpack.io" }
}
dependencies {
      implementation 'com.github.Karumi:WeakDelegate:1.0.1'
}

References

License

Copyright 2017 Karumi

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.