This file contains 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 TargetClass {} // External class to be extended | |
class Extra(var name: String = "") | |
val state = mutableMapOf<TargetClass, Extra>() | |
fun TargetClass.getState(): Extra { | |
return state.getOrPut(this) { Extra() } | |
} | |
fun TargetClass.setName(v: String) { | |
getState().name = v; |
This file contains 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
package org.mypackage.util | |
import java.lang.ref.Reference | |
import java.lang.ref.ReferenceQueue | |
import java.lang.ref.WeakReference | |
/** | |
* WeakMap that uses identity comparison rather than equality comparison ([java.util.WeakHashMap]). | |
* Useful for instance mappings. | |
* |
This file contains 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 Account from "./Account.js"; | |
export default class StealingAccount extends Account { | |
constructor() { | |
super(); | |
this._stolen = 0; | |
} | |
getRealAvailable() { |
This file contains 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
export default class Account extends StateMachine { | |
constructor() { | |
this._balance = 0; | |
} | |
$enter() { | |
this.open(); | |
} |