generics - 使用 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"))
解决方案
您可以添加一个扩展方法来调用所需的重载,而不会产生歧义:
fun <T> ComboBox<T>.setCollection(items: Collection<T>) { this.setItems(items) }
接着
productType.setCollection(listOf("1","2"))
推荐阅读
- postgresql - 运行 psql 命令时出现 psql 的符号查找错误
- java - 如何使用来自 html 表单的 POST 的 Spring Security?
- c# - 使用 Newtonsoft.Json 将名称反序列化为值
- json - Swift 5:如何从 JSONDecoder().decode 获取数据?
- python - 如何在 PyGame 中添加摩擦力
- linux - Dockerized nginx 在 ssl 模式下失败
- angular - 角度动态路径数
- sql - 如何从 Postgresql 中的计算列中获取平均值?
- sql - Oracle SQL:返回每个 ID 和产品名称的最早和最晚日期记录
- javascript - 在单独的组件中为 google-maps-react 使用标记