generics - Kotlin 中的全局通用值
问题描述
给定简单的类:
data class Optional<T>(val value: T?)
我可以如下定义通用函数和值扩展:
fun <T> T?.makeOptional() = Optional(this) // Compiles ✅
val <T> T?.optional get() = Optional(this) // Compiles ✅
我还可以定义全局泛型函数:
fun <T> makeOptionalNull() : Optional<T> = Optional(null) // Compiles ✅
但是我不能为最后一个函数定义一个等效的全局通用值:
val <T> optionalNull : Optional<T> = Optional(null) // Compilation Error ❌
// ^ Type parameter of a property must be used in its receiver type
不过,全局非通用值完全可以:
val stringNull : Optional<String> = Optional(null) // Compiles ✅
如何创建与上述类似的全局通用值?甚至可能吗?
解决方案
您的问题可以通过以下方式解决:
data class Optional<out T>(val value: T?) // <- note the 'out' modifier here
val optionalNull: Optional<Nothing> = Optional(null)
// and use it as follows:
val myOptionalVariable: Optional<String> = optionalNull // assignable thanks to 'out' modifier
推荐阅读
- javascript - 如何使用 JavaScript 库 (jsPDF)
- android - android P动作-应用程序未在broadcastReceiver中接收意图动作
- python - 我在将 Python (selenium) 输出保存到 txt 文件时遇到问题
- r - r 提取具有字段名称的数据集的子集
- javascript - 使用重置按钮清除单选按钮信息的 Dom 修改
- python - 使用准备好的查询来更改 MySQL 更新命令 Python 3.5 中的列
- php - 过滤数组以使用单词边界保留包含搜索词的值
- ios - 字符串不通过segue?
- javascript - 表格仅按字母顺序排序,而不是按数字排序
- python - 如何正确使用 tf.metrics.recall_at_k?