如何将数据类型映射到该数据类型的集合

伊曼纽尔·梅斯

编码:

abstract class DataContainer(public val path: String)
val preloaded: MutableMap<Class<out DataContainer>, HashSet<out DataContainer>> = hashMapOf()

我想知道如何使Kotlin意识到第一个out DataContainer与第二个是同一类型out DataContainer
像这样的代码:

fun <D: DataContainer> get(clazz: Class<D>): HashSet<D> = preloaded[clazz] as HashSet<D>

不需要as HashSet<D>(而且不容易产生转换错误)。我是Kotlin的新手,所以如果我错过了某些内容,请提供链接文档。此外,如果需要的object,此代码也将包含在中

莱洛曼

我认为您想要的在语言层面上是不可行的。

get只要可以安全地进行此方法的转换,它的效果还不错。我唯一可以安全地执行此操作的put方法就是同时控制该方法。

如果您强制将每个类型D : DataContainer的键与一个类型的键配对Set<D>,则可以在获取时安全地进行强制转换例如,您可以这样:

object DataContainerRegistry {

    private val preloaded: MutableMap<Class<out DataContainer>, HashSet<DataContainer>> = hashMapOf()

    fun put(dataContainer: DataContainer) {
        val set = preloaded.getOrDefault(dataContainer::class.java, HashSet())
        set.add(dataContainer)
        preloaded[dataContainer::class.java] = set
    }

    fun <D : DataContainer> get(clazz: Class<D>) = preloaded.getOrDefault(clazz, HashSet()) as Set<D>

}

此方法的局限性是:

  1. 只有一个课程(DataContainerRegistry在我的示例中为单例)可以直接访问preloaded地图
  2. get方法将仅返回Set,而不返回可变接口。

这样,您知道没有人会弄乱preloaded每个人,而且其中每个人都将其弄乱Set,然后您可以轻松地投掷。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将数据元素映射到数据类型

如何使用推土机将数据类型映射到不同的数据类型?

如何将数据从Firestore映射到列表并转换为对象数据类型

Oracle如何将数据类型映射到CODE / ID-转储和dbms_sql.define_column产生数据类型代码

如何将二进制网络数据包结构映射到Haskell标准数据类型(记录)?

将结构映射到本机数据类型

将数据类型映射到系列或列表

如何将现有列迁移到SQL中的新列,但值映射到新数据类型?

如何将Mobus数据数组的数据类型转换为REAL数据类型

是否可以将具有相同数据类型的多个列映射到 sqoop 中的新数据类型?

SQL:如何将数据插入SET数据类型?

将休眠数据类型映射到混合类型存储过程的输出

将数据类型设为Functor实例以映射到参数类型的字段上

数据类型不匹配,将现有数据库映射到EF

映射到MySql BIGINT的Ecto或Elixir数据类型

如何将意外数据类型设置为 na?

如何将Date数据类型转换为整数?

如何将NSInteger转换为NSString数据类型?

如何将 PyObjects 转换为 C 数据类型?

如何将 nvarchar 数据类型转换为数字

如何将数据类型作为参数发送

如何将数据类型 VARCHAR 更改为 DATETIME?

DynamoDB Mapper映射集合数据类型

将SNMP ASN.1映射到C ++数据类型

oracle中的哪种数据类型将映射到Java int?

JPA(Hibernate)将String映射到postgres XML数据类型

使用Parsec将字符串映射到数据类型的紧凑方法

正确的数据类型用于类型映射?

如何将* uint64和* uint32数据类型转换为int数据类型?