https://kotlinlang.org logo
#russian
Title
# russian
v

van_kalsing

06/08/2017, 1:21 AM
Copy code
fun main(args: Array<String>) {
    val s = setOf(1, 2, 3)
    val h = s as java.util.LinkedHashSet
    h.add(4)
    println(s) // Выводит [1, 2, 3, 4]
}
Вот подстава. Плохо, что в документации такое поведение не освещено. Более того, утверждается, что setOf возвращает неизменяемую коллекцию... Я, конечно, догадываюсь, что так сделано дабы не раздувать рантайм и сделать прозрачной работу из джавы. Правильно догадываюсь? Что-то для исправления ситуации производится? Какие еще есть способы повлиять на поведение кода извне (и изнутри) модуля (кроме рефлексии)? Можно ли, например, отнаследоваться от sealed класса, не из того же файла (проверить сейчас возможности нет)?
y

y2k_

06/08/2017, 5:53 AM
van_kalsing: По поводу коллекций, можешь попробовать https://github.com/Kotlin/kotlinx.collections.immutable
s

snrostov

06/08/2017, 7:07 AM
Более того, утверждается, что setOf возвращает неизменяемую коллекцию..
Returns a new read-only set with the given elements. Разве неизменяемую? Написано только для чтения, а это не одно и тоже.
m

miha-x64

06/08/2017, 8:06 AM
Если отдавать список в Java, можно использовать
Collections.unmodifiableList()
. У самого sealed-класса синтетический конструктор — из Java никак не унаследовать. Можно унаследовать его не-финальный подкласс (
class C extends B
/ K
open class B : A()
/ K
sealed class A
).
v

van_kalsing

06/08/2017, 1:25 PM
@snrostov, меня смутил вот этот документ https://kotlinlang.org/docs/reference/collections.html и фразы подобные этой
The toList extension method just duplicates the lists items, thus, the returned list is guaranteed to never change.
Фраза
Returns a new read-only set with the given elements.
тоже двусмысленная. Имелось ввиду: возвращается экземпляр интерфейса, не определяющего механизмы модификации, а читается как: возвращает множество из которого мы можем только читать, но не писать. Хотя, зная, что происходит на деле, все такие фразы можно прочитать правильно. Но при первом знакомстве они могут восприниматься превратно. В общем претензии у меня остались только к документации за двусмысленность
👍 2
@y2k_ @miha-x64 спасибо, посмотрю внимательно на варианты
4 Views