为什么Kotlin for Android Developers(书)需要再次添加扩展parseList?

2024-04-12

我知道 Anko 提供了 parseSingle、parseOpt 和 parseList 函数,我不明白为什么 Android 开发者(书)的代码需要再次设计扩展 parseList 。

你可以告诉我吗?谢谢!

https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/data/db/ForecastDb.kt https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/data/db/ForecastDb.kt

override fun requestForecastByZipCode(zipCode: Long, date: Long) = forecastDbHelper.use {

        val dailyRequest = "${DayForecastTable.CITY_ID} = ? AND ${DayForecastTable.DATE} >= ?"
        val dailyForecast = select(DayForecastTable.NAME)
                .whereSimple(dailyRequest, zipCode.toString(), date.toString())
                .parseList { DayForecast(HashMap(it)) }

}

https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/extensions/DatabaseExtensions.kt https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/extensions/DatabaseExtensions.kt

fun <T : Any> SelectQueryBuilder.parseList(parser: (Map<String, Any?>) -> T): List<T> =
        parseList(object : MapRowParser<T> {
            override fun parseRow(columns: Map<String, Any?>): T = parser(columns)
})

Anko's parseList需要一个MapRowParser,不是函数。这简化了使用。使用 Anko 版本你会写

.parseList { mapRowParser { DayForecast(HashMap(it)) } }

反而。假设有一个构造函数,例如mapRowParser我在他们的来源中找不到;否则,你可能会写得很简单。

或者更确切地说,它已经在示例代码中为您编写,只是不是作为单独的函数:

fun <T> mapRowParser(parser: (Map<String, Any?>) -> T): MapRowParser<T> = 
    object : MapRowParser<T> {
        override fun parseRow(columns: Map<String, Any?>): T = parser(columns)
    }

老实说,如果这个函数还不存在,我真的很惊讶(也许叫别的东西,但是什么?)。 OTOH,如果它确实存在,Leiva 应该使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么Kotlin for Android Developers(书)需要再次添加扩展parseList? 的相关文章

随机推荐

  • 从 RDF 节点拉出字符串

    在使用 Jena 的 SPARQL 查询时 我试图以更易读的格式获取数据 但是我不知道如何以正确的方式提取数据 就目前而言 输出是 http www w3 org TR 2003 PR owl guide 20031209 wine Sau
  • 错误:增强禁用线程

    我的 boost 库有一些问题 我正在使用 freebsd 并使用 ports 安装了我的 boost Boost 版本是 1 45 我使用 g 47 作为编译器 另外 我从未在那里定义过 BOOST DISABLE THREADS usr
  • PHP json_decode 表示法问题

    我在处理我尝试解析的 JSON 文件中使用的符号时遇到问题 一些节点有 句点 在转义对象表示法的名称中 json article gt rssFeed url 我将如何选择节点 我是否需要 str replace 句点 或者是否可以使用其他
  • 如何通过 Xcode Designer 添加 MPVolumeView?

    我最初将 MPVolumeView 动态添加到页面上 import MediaPlayer MPVolumeView h IBAction handleVolumeButtonClicked id sender if volumeView
  • 这个 C++ 程序有什么问题?

    当我编译这个程序时 include
  • ROCKSDB 由于rocksdb_max_row_locks 无法获取锁

    我尝试将 CSV 加载到 Rocksdb 数据库中 但失败并显示以下错误 Got error 10 Operation aborted Failed to acquire lock due to rocksdb max row locks
  • 图像尺寸(drawable-hdpi/ldpi/mdpi/xhdpi)

    研究android 现在我有一些图像要放入可绘制目录 hdpi ldpi mdpi xhdpi 中 我读了很多 但我还是不明白 每个目录的图像尺寸应该是多少 希望这会有所帮助 mdpi 是参考密度 也就是说 mdpi 显示屏上的 1 像素等
  • 如何在引导模式上设置本地存储?

    modal 2 id 打开调查模式 我想要的只是这个特定的模式 在有人单击关闭按钮后每 24 小时重新出现一次 document ready function var modals events if window location has
  • 类型声明之前的问号(?)在php(?int)中意味着什么[重复]

    这个问题在这里已经有答案了 我在中看到过这段代码https github com symfony symfony blob master src Symfony Component Console Output Output php htt
  • 以编程方式添加项目引用

    基本上 在阅读了几个链接后 我尝试了上面的代码 foreach EnvDTE Project proj in soln Projects if proj Name BLL VSLangProj VSProject vsproj VSLang
  • Apple Mach-O 链接器错误 lxml

    我刚刚将 xcode 升级到 4 5 现在编译时出现错误 ld library not found for lxml2 2 7 3 cland error linker command failed with exit code 1 升级后
  • 窗口函数或公共表表达式:计算范围内的前几行

    我想使用窗口函数来确定每一行满足特定条件的先前记录的总数 一个具体的例子 clone d test Table pg temp 2 test Column Type Modifiers id bigint date timestamp wi
  • 基于编译时类型的调度

    遵循 现代 C 设计 的技术 我正在实现一个具有各种编译时优化的持久性库 如果模板化成员变量派生自给定类 我希望能够将函数分派给该变量 template
  • Workbox:构建项目时无法缓存所有文件

    I use Vuejs我用workbox webpack plugin为了使我的网站离线 我想缓存一个包含我所有文件 3个文件 的文件夹 如下图所示 但是当我构建我的项目时 使用Laravel mix The main js 包含 Vue
  • android中contentprovider和contentResolver有什么区别

    有什么区别内容提供商 and 内容解析器 我不想为SQLite数据库 我正在开发一个媒体应用程序 我找到了一些解释here http www androiddesignpatterns com 2012 06 content resolve
  • 如何在多个分支上同时工作

    这是后续这个问题 https stackoverflow com questions 8453039 cleaning my git branch of features in development关于创建分支 让我感到奇怪的是 我仍然会
  • 显示多个表中的列

    我正在尝试从两个表中获取列名 我尝试了如下查询 SHOW COLUMNS FROM users UNION SHOW COLUMNS FROM posts 但这不起作用并返回语法错误 我尝试使用相同的查询DESCRIBE但这也不起作用 如何
  • 自定义强类型 BindingSource 项目添加

    我想自定义添加一个新项目到BindingSource 均为强类型 如以下 MSDN 文章所述 如何 使用 Windows 窗体 BindingSource 自定义项目添加 http msdn microsoft com en us libr
  • CSS:固定大小的div,固定垂直位置并水平居中?

    在CSS中 是否可以有一个 div 它既水平居中又固定在浏览器底部 我正在为内部 div 使用设置的宽度和高度 我试过放一个divposition relative在固定的外部 div 内 垂直对齐内容 但外部 div 不居中 我又回到了原
  • 为什么Kotlin for Android Developers(书)需要再次添加扩展parseList?

    我知道 Anko 提供了 parseSingle parseOpt 和 parseList 函数 我不明白为什么 Android 开发者 书 的代码需要再次设计扩展 parseList 你可以告诉我吗 谢谢 https github com