Я использую одноэлементный объект для хранения данных для приложения, которые изменены или используются в нескольких местах.
В моем случае у меня есть Arraylist объектов внутри синглтона. Я хочу перебрать этот Arraylist и найти один элемент с определенным идентификатором, затем я хочу скопировать этот элемент и изменить его. Но что произойдет, если я скопирую этот предмет из Singleton Arraylist, и я изменю этот скопированный предмет, он также изменит этот оригинальный предмет внутри Singleton Arraylist.
Есть ли способ скопировать одноэлементный элемент, не действуя как указатель?
Вот пример кода:
val foodList: ArrayList<Food> = AndroidSingleton.getInstance(this).foodList
val foodEntity: Food = foodList[1]
//foodList[1].foodID == 10
foodEntity.foodID = 7
//After step above foodList[1].foodID == 7 --> But I want to change only foodEntity ID
//use of coppied food Entity elsewhere
return foodEntity
Singleton:
class AndroidSingleton private constructor(private val context: Context?){
companion object : SingletonHolder<AndroidSingleton, Context>(::AndroidSingleton)
var foodList: ArrayList<Food> = ArrayList()
}
open class SingletonHolder<out T, in A>(creator: (A) -> T) {
private var creator: ((A) -> T)? = creator
@Volatile private var instance: T? = null
fun getInstance(arg: A): T {
val i = instance
if (i != null) {
return i
}
return synchronized(this) {
val i2 = instance
if (i2 != null) {
i2
} else {
val created = creator!!(arg)
instance = created
creator = null
created
}
}
}
}