Modify List.get behavior in Kotlin -
in kotlin, what's idiomatic way modify behavior of list.get
such calling get(-1)
returns last element in list?
i tried extension:
operator fun <t> list<t>.get(index: int): t { return this[if (index < 0) size + index else index] }
but didn't behave desired, , got warning
scratch.kts:3:26: warning: extension shadowed member: public abstract operator fun get(index: int): t operator fun <t> list<t>.get(index: int): t { ^
since can't hide member method extension method, option work have subclass overrides functionality in way describe.
class negativelyindexablelist<t> : arraylist<t>() { override fun get(index: int): t = if (index < 0) super.get(size + index) else super.get(index) }
however should consider future users of code. obfuscate what's going on here. meaning of list[index]
changes based on value of index
, , won't obvious in places list
, / or index
not known in advance. consider trivial example:
fun getvaluefromafewdaysago(timeline: list<day>, today: int, daysago: int) = timeline[today - daysago]
if today
2 , daysago
7, method either throw exception (if timeline
regular list) or return future (if timeline
negativelyindexablelist
).
if have have feature, consider not conflating get
. add new method:
fun getfromend(index: int) = asreversed()[index]
Comments
Post a Comment