@YouTy6bl4

Как правильно преобразовать данный код в котлин?

Добрый день, переписываю свои пакеты под котлин и столкнулся с проблемой, а именно в том, что в котлин нельзя присвоить и вернуть. Код который был:
public class Packet
{
    private ByteBuf buf;

    protected ByteBuf buf()
    {
        return buf != null ? buf : (buf = Unpooled.buffer());
    }

    @Override
    public final void fromBytes(ByteBuf buf)
    {
        this.buf = buf;
    }

    @Override
    public final void toBytes(ByteBuf buf)
    {
        if (buf != null)
            buf.writeBytes(this.buf);
    }
}

Тот же код, но в котлин.
class Packet
{
    private var buf: ByteBuf? = null

    protected fun buf(): ByteBuf
    {
        return buf ?: ({buf = Unpooled.buffer(); buf}()!!)
    }

    override fun fromBytes(buf: ByteBuf)
    {
        this.buf = buf
    }

    override fun toBytes(buf: ByteBuf?)
    {
        buf?.writeBytes(this.buf)
    }
}

Дело в том, что buf() не должен возвращать null, но получается так, что возвращается null. Что было сделано не так? Как нужно сделать?
  • Вопрос задан
  • 158 просмотров
Пригласить эксперта
Ответы на вопрос 1
Conacry
@Conacry
Здравствуйте.

Не совсем уверен, но если попробовать так:

return buf ?: Unpooled.buffer()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект