This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Optional | |
// Actual implementation | |
fun <T> deferringScope(block: DeferringScope<T>.() -> T): Optional<T> { | |
val scope = DeferringScope<T>() | |
try { | |
scope.result = Optional.of(scope.block()) | |
} catch (e: Throwable) { | |
scope.error = e.message ?: e.toString() | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.graphics.Rect; | |
import android.support.v7.widget.RecyclerView; | |
import android.view.View; | |
public class GridSpacingDecoration extends RecyclerView.ItemDecoration { | |
private int cols; | |
private int spacing; | |
public GridSpacingDecoration(int cols, int spacing) { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Repeater(val interval: Long, | |
val context: CoroutineContext = UI, | |
val block: () -> Unit | |
) { | |
private var updatingJob: Job? = null | |
private val updatingJobLock = Any() | |
fun start() = synchronized(updatingJobLock) { | |
if (updatingJob != null && updatingJob!!.isActive) { | |
return |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import kotlin.properties.ReadWriteProperty | |
import kotlin.reflect.KProperty | |
/** | |
* Property delegate to allow lazy initialization of a mutable variable. | |
*/ | |
class MutableLazy<T>(val init: () -> T) : ReadWriteProperty<Any?, T> { | |
private var value: Optional<T> = Optional.None() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Event<T> { | |
private val handlers = arrayListOf<(T) -> Unit>() | |
operator fun plusAssign(handler: (T) -> Unit) { handlers.add(handler) } | |
operator fun invoke(value: T) { for (handler in handlers) handler(value) } | |
} | |
val e = Event<String>() // define event | |
fun main(args : Array<String>) { | |
e += { println(it) } // subscribe |
NewerOlder