首页 > 解决方案 > 使用 Any 时不明确的重载方法引用

问题描述

我有一个问题,我想使用泛型类型,并且该类型具有带有 Collection 和 varargs 的重载方法。当我使用Any作为类型参数时,我无法将 List 作为参数传递。

    val productType = ComboBox<Any>("Product type")
//    public void setItems(Collection<T> items) {
//    public void setItems(T... items) {
    productType.setItems(listOf("1","2")) // Not possible

除了通过以下方式将列表转换为数组之外,还有没有更好的解决方案:productType.setItems(*listOf("1","2").toTypedArray())

编辑:尝试的工作示例:

   class Foo<T>() {
        fun setItems(items: Collection<T>) {}
        fun setItems(vararg items: T) {}
    }
        val f = Foo<Any>()
        f.setItems(listOf("1", "2"))

标签: genericskotlin

解决方案


您可以添加一个扩展方法来调用所需的重载,而不会产生歧义:

fun <T> ComboBox<T>.setCollection(items: Collection<T>) { this.setItems(items) }

接着

productType.setCollection(listOf("1","2"))

推荐阅读