Size: a a a

Kotlin Community

2020 June 29

AM

Andrew Mikhaylov in Kotlin Community
Alexander Nozik
реакт - совсем не превью
Ну так я и не о реакте)
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Ну так я и не о реакте)
Я понял. Но компоуз все-таки во многом по образу реакта спроектирован.
источник

AM

Andrew Mikhaylov in Kotlin Community
Да, но при этом он и ошибки реакта учитывает. И выглядит намного более органично и намного менее сложным в применении, чем реакт.
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Да, но при этом он и ошибки реакта учитывает. И выглядит намного более органично и намного менее сложным в применении, чем реакт.
Интересно будет посмотреть. На андроид ради этого точно не соберусь. Я довольно много в последние месяцы писал на реакте. В целом не понравилось. Вся эта идея с пропагацией стейта очень быстро превращается в тыкву на сложной логике. Писать на нем отдельные компоненты весьма приятно
источник

AL

Anton Lakotka in Kotlin Community
У меня вопрос по интеропу с джавой.
В джавовской либе определили

public abstract class AbstractFoo {
   protected AbstractFoo(Builder builder) { /*...*/ }
   protected static abstract class Builder { /*...*/ }
}


Там же  сделали несколько реализаций таким образом

pu
blic class ConcreteFoo extends AbstractFoo {
   protected ConcreteFoo(Builder builder) {
       super(builder);
       /*...*/
   }
   public static Builder builder() { return new Builder(); }
   public static class Builder extends AbstractFoo.Builder { /*...*/ }
}

Как видно из определения public класс ConcreteFoo.Builder наследуется
от protected класса AbstractFoo.Builder. По всей видимости это
является валидным в Java

Но вот в Kotlin следующий код не компилируется

clas
s KFoo
private constructor (builder: Builder) : AbstractFoo(builder) {
   // 'public' subclass exposes its 'protected (in AbstractFoo)' supertype Builder
   class Builder : AbstractFoo.Builder()
}

Ст
алкивался кто-либо с подобным?
источник

VP

Vladimir Petrakovich in Kotlin Community
Anton Lakotka
У меня вопрос по интеропу с джавой.
В джавовской либе определили

public abstract class AbstractFoo {
   protected AbstractFoo(Builder builder) { /*...*/ }
   protected static abstract class Builder { /*...*/ }
}


Там же  сделали несколько реализаций таким образом

pu
blic class ConcreteFoo extends AbstractFoo {
   protected ConcreteFoo(Builder builder) {
       super(builder);
       /*...*/
   }
   public static Builder builder() { return new Builder(); }
   public static class Builder extends AbstractFoo.Builder { /*...*/ }
}

Как видно из определения public класс ConcreteFoo.Builder наследуется
от protected класса AbstractFoo.Builder. По всей видимости это
является валидным в Java

Но вот в Kotlin следующий код не компилируется

clas
s KFoo
private constructor (builder: Builder) : AbstractFoo(builder) {
   // 'public' subclass exposes its 'protected (in AbstractFoo)' supertype Builder
   class Builder : AbstractFoo.Builder()
}

Ст
алкивался кто-либо с подобным?
Ну да, всё так
источник

AL

Anton Lakotka in Kotlin Community
Я понимаю, что все так. Но меня интересует возможность реализовать класс на котлине.
или это невозможно? т.е. тут тот самый случай когда интероп невозможен.
источник

КР

Кирилл Романенко... in Kotlin Community
Возможно ли написать контракт для проверки дженерика на нулл? Типа
@OptIn(ExperimentalContracts::class)
inline fun <reified T : Any?> isNullable(): Boolean {
   contract {
       returns(true) implies(null is T)
   }
   return null is T
}


Чтобы для типа Boolean был false, а для Boolean? был true.
источник

BP

Bogdan Panchenko in Kotlin Community
Кирилл Романенко
Возможно ли написать контракт для проверки дженерика на нулл? Типа
@OptIn(ExperimentalContracts::class)
inline fun <reified T : Any?> isNullable(): Boolean {
   contract {
       returns(true) implies(null is T)
   }
   return null is T
}


Чтобы для типа Boolean был false, а для Boolean? был true.
Ну ты вроде уже написал 😄
источник

КР

Кирилл Романенко... in Kotlin Community
Bogdan Panchenko
Ну ты вроде уже написал 😄
Это не работает, пишет что ошибка описания контракта.
источник

BP

Bogdan Panchenko in Kotlin Community
Кирилл Романенко
Это не работает, пишет что ошибка описания контракта.
В implies мож что то другое нужно написать, тебе скорей нужно что при false тип становится notnull
источник

КР

Кирилл Романенко... in Kotlin Community
Bogdan Panchenko
В implies мож что то другое нужно написать, тебе скорей нужно что при false тип становится notnull
Никакой разницы
источник

КР

Кирилл Романенко... in Kotlin Community
Вообще без разницы, ладно, мне нужно, чтобы внутри функции можно было проверить, что T не наллбл тип, и передать в другую функцию, которая требует reifered T : Any.
источник

BP

Bogdan Panchenko in Kotlin Community
Кирилл Романенко
Никакой разницы
Посмотри как сделан filterNoNull
источник

BP

Bogdan Panchenko in Kotlin Community
Кирилл Романенко
Вообще без разницы, ладно, мне нужно, чтобы внутри функции можно было проверить, что T не наллбл тип, и передать в другую функцию, которая требует reifered T : Any.
Может использовать requiredNotNull ?
источник

BP

Bogdan Panchenko in Kotlin Community
в него тоже можно заглянуть как контракт описан
источник

VP

Vladimir Petrakovich in Kotlin Community
Кирилл Романенко
Вообще без разницы, ладно, мне нужно, чтобы внутри функции можно было проверить, что T не наллбл тип, и передать в другую функцию, которая требует reifered T : Any.
Должен помочь typeOf
источник

BP

Bogdan Panchenko in Kotlin Community
Vladimir Petrakovich
Должен помочь typeOf
Чем он тут поможет ? Там просто T is Any
источник

BP

Bogdan Panchenko in Kotlin Community
Хотя нет в другую функцию передать нужно
источник

VP

Vladimir Petrakovich in Kotlin Community
Bogdan Panchenko
Чем он тут поможет ? Там просто T is Any
Ну там же можно посмотреть, нуллабельный он или нет
источник