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 ответов

49 просмотров

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

По-моему в документации это не плохо прописано: 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
После того как применяю контекстную подсказку, то ...

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

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта