我有一个Singleton类,其中有两种方法,一种用于将元素保存在单例列表中,另一种用于获取所有保存的产品。请注意,产品将一一保存。
我的问题是我总是保存最后一个元素,并且在单例中只有一个。如何保存所有要放入单例中的元素。
class VoucherRepository {
object Singleton {
var vouchers: MutableList<Product> = mutableListOf<Product>()
}
fun addProductToShoppingCart(voucherProduct: Product){
Singleton.vouchers.add(voucherProduct)
}
fun getProductsInShoppinCart() : List<Product>?{
return Singleton.vouchers
}
}
更新
class ProductRepository {
companion object Singleton {
var vouchers: MutableList<Product> = mutableListOf<Product>()
fun addProductToShoppingCart(voucherProduct: Product){
vouchers.add(voucherProduct)
}
fun getProductsInShoppinCart() : List<Product>?{
return vouchers
}
fun cleanProductsInShoppinCart(){
vouchers.clear()
}
}
}
答案 0 :(得分:0)
您可以显示示例代码吗?我无法重现问题。
fun main(args: Array<String>) {
println("Hello, world!")
val repo = VoucherRepository()
println(VoucherRepository.Singleton.vouchers) // []
repo.addProductToShoppingCart("aaa")
println(VoucherRepository.Singleton.vouchers) // [aaa]
repo.addProductToShoppingCart("bbb")
println(VoucherRepository.Singleton.vouchers) // [aaa, bbb]
VoucherRepository().addProductToShoppingCart("ccc")
println(VoucherRepository.Singleton.vouchers) // [aaa, bbb, ccc]
println(repo.getProductsInShoppinCart()) // [aaa, bbb, ccc]
println(VoucherRepository().getProductsInShoppinCart()) // [aaa, bbb, ccc]
}
class VoucherRepository {
object Singleton {
var vouchers: MutableList<String> = mutableListOf()
}
fun addProductToShoppingCart(voucherProduct: String) {
Singleton.vouchers.add(voucherProduct)
}
fun getProductsInShoppinCart() : List<String> {
return Singleton.vouchers
}
}
您的单例似乎以某种方式从内存中释放并一次又一次初始化,但是没有更多代码我无能为力。
答案 1 :(得分:0)
此技术类似于构建器模式
它将所有产品保存到临时MutableList中,并将所有产品成功添加到tempVauchers中后,它将初始化单例,您可以通过调用getVauchers()*来获取单例。
单班
class VoucherRepository {
object Singleton {
var vouchers: MutableList<Product> = mutableListOf<Product>()
}
}
使用打击代码添加产品
var tempVauchers: MutableList<Product> = mutableListOf<Product>()
fun compileCart(voucherProduct: String, isComplete: Boolean){
if(!isComplete){
tempVauchers.add(voucherProduct)
}else{
VoucherRepository.vouchers = tempVauchers
}
}
获取Singleton
fun getVauchers(): MutableList<Product> {
return VoucherRepository.vouchers
}