Как клонировать объект в Котлине?

if (index < 0 || index >= array.length) {
    // Don't use this index. This is out of bounds (borders, limits, whatever).
} else {
    // Yes, you can safely use this index. The index is present in the array.
    Object element = array[index];
}

См. также:


Обновление: в соответствии с вашим фрагментом кода,

for(int i = 0; i<=name.length; i++) {

Индекс содержит длину массива. Это за гранью. Вы должны заменить <= на <.

for(int i = 0; i < name.length; i++) {
25
задан Dims 1 March 2018 в 15:45
поделиться

2 ответа

Если класс, который Вы пытаетесь клонировать, не реализует Cloneable или не является классом данных и является частью внешней библиотеки, можно создать дополнительный метод, который возвращает новый экземпляр. Например:

class Person {
  var id: String? = null
  var name: String? = null
} 
fun Person.clone(): Person {
  val person = Person()
  person.id = id
  person.name = name
  return person 
}
0
ответ дан 28 November 2019 в 05:18
поделиться
fun <T : Any> clone (obj: T): T {
  if (!obj::class.isData) {
    println(obj)
    throw Error("clone is only supported for data classes")
  }

  val copy = obj::class.memberFunctions.first { it.name == "copy" }
  val instanceParam = copy.instanceParameter!!
  return copy.callBy(mapOf(
    instanceParam to obj
  )) as T
}

1
ответ дан 28 November 2019 в 05:18
поделиться
Другие вопросы по тегам:

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