Создание класса данных с помощью KotlinPoet

Я хочу создать простой класс данных с помощью KotlinPoet:

data class User(val id: Int) 

Я делаю это так:

 val builder = KotlinFile.builder("", "Foo") val classBuilder = TypeSpec.classBuilder("User").addModifiers(KModifier.DATA) val ctor = FunSpec.constructorBuilder() ctor.addParameter("id", Int::class) classBuilder.primaryConstructor(ctor.build()) builder.addType(classBuilder.build()) builder.build().writeTo(System.out) 

Но я получаю следующее:

 data class User(id: Int) { } 

Как я могу добавить модификатор val в параметр конструктора?

    Вот проблема, обсуждающая эту проблему.

    Вывод заключается в том, что способ написать этот код – создать свойство, которое соответствует имени параметра конструктора, и инициализируется им:

     KotlinFile.builder("", "Foo") .addType(TypeSpec.classBuilder("User") .addModifiers(KModifier.DATA) .primaryConstructor(FunSpec.constructorBuilder() .addParameter("id", Int::class) .build()) .addProperty(PropertySpec.builder("id", Int::class) .initializer("id") .build()) .build() ) .build() .writeTo(System.out) 

    Однако эта функция недоступна в версии 0.2.0 от KotlinPoet. Он уже реализован, и в этом репозитории протестирован тест , но вам нужно будет дождаться, когда версия KotlinPoet версии 0.3.0 сможет использовать эту функцию, которая должна появиться в следующем несколько дней.

    Эта функция доступна с 0.3.0 , которая сейчас отсутствует.


    Предыдущий код с альтернативным форматированием, который соответствует вашему оригинальному стилю:

     val builder = KotlinFile.builder("", "Foo") val classBuilder = TypeSpec.classBuilder("User").addModifiers(KModifier.DATA) val ctor = FunSpec.constructorBuilder() ctor.addParameter("id", Int::class) classBuilder.primaryConstructor(ctor.build()) val idProperty = PropertySpec.builder("id", Int::class).initializer("id").build() classBuilder.addProperty(idProperty) builder.addType(classBuilder.build()) builder.build().writeTo(System.out) 
    Intereting Posts
    ReactiveStreams NPE при использовании publishOn с пользовательским издателем Что можно выразить в константе времени компиляции (const val)? Переменные не инициализируются должным образом при инициализации в абстрактной абстрактной функции, вызванной из конструктора или блока init неразрешенная ссылка на класс, методы Kotlin: set-ish setter, который возвращает «this» Веб-приложение Kotlin | ссылка css-файл Как установить нижнюю границу для FAB в макете Anko DSL? Ссылка Kotlin Textview id не работает с неанглийскими символами Eclipse RCP: экспорт PDE и Kotlin Kotlin: использование статических методов google-guava в качестве расширений Котлинское преобразование объектов в объекты Kotlin Android View Binding: findViewById vs Butterknife vs Kotlin Android Extension Идиоматический способ чтения двоичного файла с Kotlin? Как сделать multiconditional для цикла в kotlin Как передать двоичный массив в качестве аргумента функции в Котлине