Size: a a a

Kotlin Community

2020 November 13

IP

Iaroslav Postovalov in Kotlin Community
в противном случае data class
источник

VN

Viktor Noskin in Kotlin Community
Я вообще не уверен, что такое можно скормить руму, лучше в @kotlin_mobile
источник

I

Ivan in Kotlin Community
окей, спасибо, ребят
источник

DA

Dr. Alan in Kotlin Community
есть класс
open class File(var name: String, var size: Int)
я хочу создать его класс-наследник архив, куда будут передаваться разные файлы
class Archive(name: String, var files: List<File>): File(name, ???)
для создания File мне нужно заранее знать его размер, и я могу это подсчитать в момент инициализации, к примеру с помощью функции
fun calc_size(): Int{
var sum = 0
for (f in files)
   sum += f.size
   return sum
}
как это реализовать, что подставить вместо ???
источник

AL

Alexander Levin in Kotlin Community
Dr. Alan
есть класс
open class File(var name: String, var size: Int)
я хочу создать его класс-наследник архив, куда будут передаваться разные файлы
class Archive(name: String, var files: List<File>): File(name, ???)
для создания File мне нужно заранее знать его размер, и я могу это подсчитать в момент инициализации, к примеру с помощью функции
fun calc_size(): Int{
var sum = 0
for (f in files)
   sum += f.size
   return sum
}
как это реализовать, что подставить вместо ???
Ну, если у вас функция для подсчёта будет не внутри класса, то можно просто её спокойно вызвать (но тогда список файлов надо в неё явно передать)

Альтернативно можно немного изменить структуру, чтобы не надо было завязываться на то, что потенциально подсчитываемый параметр надо было передавать в конструктор. Например в таком случае может быть абстрактный класс файла, а обычный файл или архив - это уже его наследники.

Примеры всего:

fun main() {
   val file1 = File("abc", 4)
   val file2 = File("cde", 2)
   val archive1 = Archive("def", listOf(file1, file2))
   val file3 = File("qwe", 6)
   val archive2 = Archive("asd", listOf(file3, archive1))
   println(archive2.size)
   
   val altFile1 = SimpleFile("abc", 4)
   val altFile2 = SimpleFile("cde", 2)
   val altArchive1 = ArchiveFile("def", listOf(altFile1, altFile2))
   val altFile3 = SimpleFile("qwe", 6)
   val altArchive2 = ArchiveFile("asd", listOf(altFile3, altArchive1))
   println(altArchive2.size)
}

open class File(val name: String, val size: Int)
class Archive(name: String, val files: List<File>): File(name, calculateSize(files))
fun calculateSize(files: List<File>) = files.sumBy { it.size }


sealed class AltFile {
   abstract val name: String
   abstract val size: Int
}
class SimpleFile(override val name: String, override val size: Int): AltFile()
class ArchiveFile(override val name: String, val files: List<AltFile>): AltFile() {
   override val size by lazy { files.sumBy { it.size } }
}
источник

DA

Dr. Alan in Kotlin Community
Alexander Levin
Ну, если у вас функция для подсчёта будет не внутри класса, то можно просто её спокойно вызвать (но тогда список файлов надо в неё явно передать)

Альтернативно можно немного изменить структуру, чтобы не надо было завязываться на то, что потенциально подсчитываемый параметр надо было передавать в конструктор. Например в таком случае может быть абстрактный класс файла, а обычный файл или архив - это уже его наследники.

Примеры всего:

fun main() {
   val file1 = File("abc", 4)
   val file2 = File("cde", 2)
   val archive1 = Archive("def", listOf(file1, file2))
   val file3 = File("qwe", 6)
   val archive2 = Archive("asd", listOf(file3, archive1))
   println(archive2.size)
   
   val altFile1 = SimpleFile("abc", 4)
   val altFile2 = SimpleFile("cde", 2)
   val altArchive1 = ArchiveFile("def", listOf(altFile1, altFile2))
   val altFile3 = SimpleFile("qwe", 6)
   val altArchive2 = ArchiveFile("asd", listOf(altFile3, altArchive1))
   println(altArchive2.size)
}

open class File(val name: String, val size: Int)
class Archive(name: String, val files: List<File>): File(name, calculateSize(files))
fun calculateSize(files: List<File>) = files.sumBy { it.size }


sealed class AltFile {
   abstract val name: String
   abstract val size: Int
}
class SimpleFile(override val name: String, override val size: Int): AltFile()
class ArchiveFile(override val name: String, val files: List<AltFile>): AltFile() {
   override val size by lazy { files.sumBy { it.size } }
}
Спасибо за подробный ответ
источник

AM

Andrew Mikhaylov in Kotlin Community
Iaroslav Postovalov
я не скринил, но ещё в 2018 году у меня идея ругалась на хип в 2 Гбайт
Android Studio щас на тачке с 16 Гб предлагает свой хип в 2 Гб установить
источник

ГА

Георгий Авакян... in Kotlin Community
Добрый вечер, подскажите плз статью или так мб, изза чего может не вызываться emit в livedatascope
источник

LS

Lev Shagalov in Kotlin Community
inline fun <reified T : KouchEntity> encode(
   entity: T
) = Json.encodeToJsonElement(entity)

Как сделать не инлайн?
источник

с#

саша сок #KotlinGang... in Kotlin Community
Lev Shagalov
inline fun <reified T : KouchEntity> encode(
   entity: T
) = Json.encodeToJsonElement(entity)

Как сделать не инлайн?
fun <T : ...> encode(entity: T, serializer: KSerializer<T>) = Json.encode(...)
источник

LS

Lev Shagalov in Kotlin Community
Ну, тогда мне надо как то сериализатор снаружи определять
источник

с#

саша сок #KotlinGang... in Kotlin Community
ну вот поэтому и инлайн сделан, он ищет селиализатор по typeOf<T>(), а typeOf инлайн
источник

LS

Lev Shagalov in Kotlin Community
Окей... тогда может это решается по другому.

https://github.com/Lewik/kouch/blob/master/src/commonMain/kotlin/kouch/serialization.kt#L9
Есть функция, которая сериализует в json какой то экземпляр KouchEntity.

Я не могу понять как сделать функцию сериализующую по тем же правилам но уже List<KouchEntity> причем разных классов.

ClassName - это inline class со строкой
источник
2020 November 14

AM

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

FO

Franky OoGle in Kotlin Community
Как отменить $ и показать его как char

Внутри println
источник

AN

Alexander Nozik in Kotlin Community
Franky OoGle
Как отменить $ и показать его как char

Внутри println
${"$"} в доке есть
источник

AN

Alexander Nozik in Kotlin Community
Точнее просто \$ в обычных строках. То, что я написал, это для raw strings
источник

FO

Franky OoGle in Kotlin Community
Alexander Nozik
${"$"} в доке есть
Сори я перепутал сори я перепутал
источник

FO

Franky OoGle in Kotlin Community
Я создал val
Внутри него есть $
Это пороль
val password = "djdv$am$bg"
Мне котлин выделяет доллар


Не могу понять как это убрать
источник

AM

Andrew Mikhaylov in Kotlin Community
Franky OoGle
Я создал val
Внутри него есть $
Это пороль
val password = "djdv$am$bg"
Мне котлин выделяет доллар


Не могу понять как это убрать
Вам выше ответили уже, поставьте \ перед $
источник