169 похожих чатов

Когда делаю что-то вроде этого, IDE выдает warning: Can be

joined with assignment

class Rectangle : Shape {
override val width: Float
override val height: Float

constructor(width: Float, height: Float) {
this.width = width
this.height = height
}

constructor(width: Int, height: Int) : this(
width = width.toFloat(),
height = height.toFloat(),
)
}

Но когда пользуюсь контекстной подсказкой Idea рефакторит во что-то такое, что пишет ошибку компиляции

class Rectangle : Shape {
override val width: Float = width
override val height: Float = height

constructor(width: Float, height: Float)

constructor(width: Int, height: Int) : this(
width = width.toFloat(),
height = height.toFloat(),
)
}

Это баг тулинга идеи или языка?

13 ответов

19 просмотров

Я бы порекомендовал переписать конструкторы класса по-котлиновски, а не по джавовски. Размер кода уменьшится на две трети, и понятнее все сразу станет.

По-моему в документации это не плохо прописано: https://kotlinlang.org/docs/classes.html#inheritance Котлину приятнее использовать ,,праймари,, конструкторы (совмещённые с именем класса) и сразу параметрами из них определять свойства, либо можно использовать init {} (но как мне уже тут говорили, init редко используется и применяется обычно прямое присвоение - именно как сработал автофикс)

Dmitry-Stakhov Автор вопроса
Jan 𝑓𝑛
По-моему в документации это не плохо прописано: h...

Мы бы не хотели использовать праймари конструктор, так как так тяжелее понять кто что вызывает. Поэтому решили сделать два явных конструктора. Разумеется, если есть идеи как улучшить читабельность, всегда открыты к предложениям 😅

Dmitry Stakhov
Мы бы не хотели использовать праймари конструктор,...

сделать пустой праймари приватным и дергать его из других конструкторов (но тогда вероятно придется сделать lateinit свойства), или жинерик для типов наследуемых от number, или оставить один от Float и потом при создании конвертировать параметры к Float😄

Dmitry Stakhov
Мы бы не хотели использовать праймари конструктор,...

Чтобы улучшить читаемость, как говорили выше, лучше один primary constructor с двумя override val, и один дополнительный конструктор, вызывающий primary. Это стандарт.

Dmitry Stakhov
Мы бы не хотели использовать праймари конструктор,...

по факту у вас праймари остался) просто он сделан в виде тела, а идея просто говорит "можно проще", можно поставить сапрез на этот варнинг

Dmitry-Stakhov Автор вопроса
Bohdan Panchenko
по факту у вас праймари остался) просто он сделан ...

Понятно что можно игнорировать проблемы, но это не мой путь) То что идея говорит можно проще и ломает код не есть хорошо по моему мнению

Dmitry Stakhov
Понятно что можно игнорировать проблемы, но это не...

почему ? ві против инспекций ? оно не должно ломать код, оно заменяет на еквивалент

Dmitry-Stakhov Автор вопроса
Bohdan Panchenko
почему ? ві против инспекций ? оно не должно ломат...

Если эквивалент не компилируется, я думаю проблема не в том я за или против

Dmitry-Stakhov Автор вопроса

После того как применяю контекстную подсказку, то почеркивает красным и даёт ошибку компиляции. Я сказал это в первом сообщении

а не увидел во что рефакторить, такое себе читать, должна упростить

Dmitry Stakhov
После того как применяю контекстную подсказку, то ...

а оно еще не компилируется - явно репортить нужно

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Приветствуем всех! Устали без проектов? Если вы программист и хотите получать стабильные заказы, компания Elif предлагает вам недельный курс по поиску проектов и их ведению. ...
Elif
1
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
19
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
Всем привет, после Си стоит учить плюсы или лучше на раст перейти?
Linus
8
или вы считаете муит дает знание?
супер_лох_3000 альфа версия
12
значить например он учился в СДУ то получается он особенный?)
Asets Serikov
11
Карта сайта