У меня есть API, который позволяет кому-то добавить элемент в упорядоченную коллекцию, и он может дополнительно указать индекс, в который должен быть вставлен элемент.Если этот элемент отсутствует, его следует добавить в конец.
В моей конечной точке вход json распаковывается в DTO:
data class AddItemDTO(
val name: String,
val insertIndex :Int?
)
В моей конечной точке я вызываю службу:
myService.insertItem(parentId, addItemDTO.name, addItemDTO.insertIndex)
где parentId - это идентификатор объекта, содержащего коллекцию, в которую я хочу добавить элемент.Родительский объект имеет функцию для добавления элемента в коллекцию:
data class Parent() {
... other stuff
private lateinit var _items: MutableList<Item>
fun addItem(item: Item, insertIndex: Int = _items.size) {
_items.add(insertIndex, item)
}
}
В моем сервисе я хотел бы вызвать эту функцию с параметром по умолчанию, если он не равен нулю, и без него, если он равен нулю.Моя сервисная функция теперь выглядит так:
fun insertItem(parentId: UUID, name: String, insertIndex: Int?) {
val parent = parentRepository.getOne(parentId)
val item = Item(name)
if (insertIndex == null) parent.addItem(item)
else parent.addItem(item, insertIndex)
}
Это прекрасно работает, но я не нахожу if / else очень симпатичным.Мне было интересно, могу ли я вызвать метод в родительском методе по-другому, что-то вроде:
parent.addRound(item, insertIndex ?: void)
Конечно, я открыт для еще лучших / более элегантных решений