m
12/04/2017, 7:11 AMgildor
12/04/2017, 7:12 AMm
12/04/2017, 7:12 AMgildor
12/04/2017, 7:14 AMm
12/04/2017, 7:26 AMgildor
12/04/2017, 7:27 AMm
12/04/2017, 7:29 AMgildor
12/04/2017, 7:30 AMm
12/04/2017, 7:33 AMgildor
12/04/2017, 7:34 AMm
12/04/2017, 7:35 AMgildor
12/04/2017, 7:35 AMm
12/04/2017, 7:41 AMgildor
12/04/2017, 7:43 AMm
12/04/2017, 7:44 AMgildor
12/04/2017, 7:44 AMm
12/04/2017, 7:49 AMgildor
12/04/2017, 7:51 AMm
12/04/2017, 7:51 AMgildor
12/04/2017, 7:54 AMm
12/04/2017, 9:04 AMgildor
12/04/2017, 9:07 AMilya.gorbunov
12/06/2017, 5:38 PMm
12/06/2017, 6:35 PMilya.gorbunov
12/06/2017, 6:37 PMjava.util.Collections.unmodifiableList
m
12/06/2017, 6:44 PMgildor
12/07/2017, 1:01 AMв классе ImmutableList методьі add, delete и т.д. бьіли deprecatedДля этого придется использовать этот класс напрямую везде в коде вместо интерфейса. И все равно есть множество случаев где тип потеряется при передаче в метод к примеру.
ImmutableList методьі add, delete и т.д. отсуствовалиИх там просто не будет на стороне Kotlin, точно так же как и сейчас, т.к. интерфейс kotlin.collection.List не имеет методов модификациию И они точно будут на стороне Java. И эту проблему не решить без своей кастомной иерархии интерфейсов коллекций
сконфигурировать lint падать если он заметит использование deprecated методовЭто уже возможно с помощью флагов Kotlin компилятора
не должно бьіть возможньім кастить к Muttable колекцииЗапретить кастить вы не можете, вы и сейчас что в Java, что в Kotlin можете написать
"" as Int
, тут только падать на ворнингах поможет и то не всегда. И вообще запретить кастить даже без ворнинга не получится, просто по причине того, что Mutable интерфейс наверняка будет наследников Immutable интерфейса (как это сейчас и работает в Kotlin) иначе очень его не удобно использовать.
И kotlinx.collections.immutable эту проблему вам не решат, так же как она не решается через Guava что на стороне Kotlin, что на стороне Java.
Но если честно я не вижу большой проблемы совсем, если кто-то пишет код который кастит без проверки типа и затем пытается поменять внутреннее состояние объекта то это его проблема, такой код плох сам по себе.
kotlin.collections.List решает большинство случаев со случайной модификацией, но если хочется серьезной защиты от модификации, то просто можно обернуть в Collections.unmodifiableList или использовать Guava ImmutableList как основу для коллекции и в дальнейшем использовать интерфейс kotlin.collections.Listm
12/07/2017, 8:35 AMДля этого придется использовать этот класс напрямую везде в коде вместо интерфейса.Да, я так и делаю. Для этого это и нужно.
Если вы уже используете ImmutableList из Guava то Collections.unmodifiableList уже точно не нуженДело в том что ImmutableList из Guava в Kotlin возможно кастить в MutableList - это и делает бесполезньім использования ImmutableList из Guava в Kotlin.
gildor
12/07/2017, 8:39 AMm
12/07/2017, 8:41 AMList o1 = (ArrayList) ImmutableList.of();
- не позволит компиляторgildor
12/07/2017, 8:41 AMm
12/07/2017, 8:42 AMgildor
12/07/2017, 8:42 AMList o1 = ImmutableList.of();
m
12/07/2017, 8:44 AMval mutableIList = ImmutableList.of(1,2) as MutableList<Int>
gildor
12/07/2017, 8:47 AMm
12/07/2017, 8:48 AMMutable интерфейс наверняка будет наследников Immutable интерфейса (как это сейчас и работает в Kotlin) иначе очень его не удобно использовать.жаль(
gildor
12/07/2017, 8:48 AMm
12/07/2017, 8:49 AMgildor
12/07/2017, 8:50 AMжаль(Вы всегда можете сделать свою иерархию классов с полностью кастомными интерфейсами которые делегируют имплементацию в ту же Guava и попробовать с ней поработать, это просто очень неудобно иметь 2 несовместимых интерфейса коллекций (нельзя просто взять и передать мутабельную коллекцию в метод который требует иммутабельный) которые постоянно приходится конвертировать еще и в платформенный java.util.List
m
12/07/2017, 8:52 AMgildor
12/07/2017, 8:52 AMmutableIList = (List) ImmutableList.of(1,2)или на это:
void mutateList(List list) { … }
mutateList(ImmutableList.of(1,2))
m
12/07/2017, 8:53 AMgildor
12/07/2017, 8:53 AMm
12/07/2017, 8:56 AMgildor
12/07/2017, 8:57 AMm
12/07/2017, 8:58 AMgildor
12/07/2017, 8:58 AMm
12/07/2017, 8:59 AMgildor
12/07/2017, 8:59 AMm
12/07/2017, 8:59 AMgildor
12/07/2017, 9:08 AMm
12/07/2017, 9:11 AMgildor
12/07/2017, 9:12 AM