如何在Kotlin中的Singleton对象中按元素保存列表

时间:2019-05-15 16:09:49

标签: android kotlin singleton

我有一个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()
        }
    }
}

2 个答案:

答案 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
 }