То, что у вас есть выше, отлично работает для меня, используя kotlin 1.3.11 с незначительной детализацией - @SerializedName("full_name") val fullName: String = 0
не может быть целым числом, поэтому я изменил его на @SerializedName("full_name") val fullName: String = ""
.
На самом деле, работает это:
fun main(args: Array<String>) {
println(UserItem().imageType)
println(UserItem(images = listOf("foo")).imageType)
println(UserItem(images = listOf("foo", "bar")).imageType)
}
Выходы:
NO_PHOTO
SINGLE_PHOTO
MULTIPLE_PHOTO
Что по вашей логике правильно. Когда вы декомпилируете класс UserItem
, вы увидите следующий конструктор:
public UserItem(@NotNull String nick, @NotNull String fullName, @NotNull String bio, @NotNull List images, @NotNull UserItem.ImageType imageType) {
Intrinsics.checkParameterIsNotNull(nick, "nick");
Intrinsics.checkParameterIsNotNull(fullName, "fullName");
Intrinsics.checkParameterIsNotNull(bio, "bio");
Intrinsics.checkParameterIsNotNull(images, "images");
Intrinsics.checkParameterIsNotNull(imageType, "imageType");
super();
this.nick = nick;
this.fullName = fullName;
this.bio = bio;
this.images = images;
this.imageType = imageType;
// This is what you have in the init block
if (this.images.size() == 1) {
this.imageType = UserItem.ImageType.SINGLE_PHOTO;
} else if (this.images.size() > 1) {
this.imageType = UserItem.ImageType.MULTIPLE_PHOTO;
}
}
Как видите, блок init встроен после конструктора. Может быть, я неправильно понял проблему?
PS: Вы можете легко проверить то же самое, выполнив «Показать байт-код котлина», и появится окно с кнопкой «Декомпилировать», которое покажет вам код Java.